You can do it with a custom buffer and count function. user=> (def b (buffer 1000)) #'user/b user=> (def c (chan b)) #'user/c user=> (count b) 0 user=> (>!! c :foo) nil user=> (>!! c :foo) nil user=> (>!! c :foo) nil user=> (>!! c :foo) nil user=> (count b) 4 user=>
On Sun, Jan 12, 2014 at 3:59 AM, t x <txrev...@gmail.com> wrote: > I have a another stupid question: > > How is this a race-condition / a source of problem given that: > * all I want to do is to read, I'm not writing / modifying > > In particular, the sole goal of this read is to show a counter saying > "there are XYZ people ahead of you in line." > > It seems that to have a race conditions, one needs to : > > (1) thread-1 reads x > (2) thread-2 modifies x > (3) thread-1 writes some state depending on old value of x > > > On Sat, Jan 11, 2014 at 5:47 PM, Brandon Bloom > <brandon.d.bl...@gmail.com>wrote: > >> Any API that lets you peek at the "state" of a channel is a surefire >> source of race conditions. So no, public API-wise, there isn't any way to >> do what you want. In theory, you can peek at the internals using reflection >> to get that information, but don't do that! >> >> Instead, you can simply *count* yourself. Stick an extra go-loop on >> either end that swaps an atom with inc or dec. >> >> On Saturday, January 11, 2014 12:19:51 PM UTC-5, t x wrote: >>> >>> Hi, >>> >>> I have a clojure.core.async.chan >>> >>> Is there a way to figure out the # of elements currently queued on the >>> channel? (preferably in O(1) time) >>> >>> I don't want to actually take any item off the channel, I just want a >>> progress bar, something like "there are 20 transactions ahead of you in >>> life to be processed" >>> >>> Thanks! >>> >> -- >> -- >> You received this message because you are subscribed to the Google >> Groups "Clojure" group. >> To post to this group, send email to clojure@googlegroups.com >> Note that posts from new members are moderated - please be patient with >> your first post. >> To unsubscribe from this group, send email to >> clojure+unsubscr...@googlegroups.com >> For more options, visit this group at >> http://groups.google.com/group/clojure?hl=en >> --- >> You received this message because you are subscribed to the Google Groups >> "Clojure" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to clojure+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/groups/opt_out. >> > > -- > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.