What I want to do is something I probably have done dozens of times in C++: 
two threads, one thread putting items in a queue, another taking it out 
(FIFO). How to do it in Clojure? I am at a loss. I thought about a few 
options:

1. "watches", but it cannot change the queue itself (can only watch). plus, 
I am not sure watch function will run in another thread
2. "agent", but how to notify the consumer thread when there is new item? 
How to block the consumer thread when there is no items in the queue?
3.  Ping-pong promises: so the producer delivers a promise to the consumer, 
and the consumer immediately deliver another promise to the producer to 
acknowledge the receipt so the producer can move on. But that will prevent 
the producer to put the next item into the queue before the consumer finish 
its processing, so not exactly concurrent.

I cannot believe I am the first one to encounter this. Can anyone suggest 
some idiomatic solution for the above? Thank you.



-- 
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

Reply via email to