Hi, I gave it a try to find a solution to your problem. I ended up
using a single atom to hold the produced data and as means to detect
that consuming started (by swapping in a fn wrapping the produced
value). Don't know wether this fits your problem better than the one
already posted.
(def data (atom []))
(defn produce [data-atom]
(Thread/sleep 100)
(when (vector? (swap! data #(if (vector? %) (conj % :foo) %)))
(recur data-atom)))
(defn consume [data-atom]
((swap! data-atom #(if (vector? %) (fn [] %) %))))
(defn produce-consume-test []
(dotimes [n 100]
(future-call #(produce data)))
(Thread/sleep 1000)
(consume data))
(do (swap! data (constantly []))
(count (produce-consume-test)))
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---