(<!! c) will hang because the value you put into c has already been taken
by the first go (running in a different thread). So it is blocking until
something puts another value into c. Since nothing ever does your program
hangs.
If it helps you can read "go" as "please run this somewhere else, possibly
at a different time" and let the current thread continue after the go.
I can't explain this very well but the documentation aspect is accurate.
On Sunday, May 19, 2019 at 7:33:07 PM UTC+2, Brian Beckman wrote:
>
> The documentation for >!! reads:
>
> -------------------------
> clojure.core.async/>!!
> ([port val])
> puts a val into port. nil values are not allowed. Will block if no
> buffer space is available. Returns true unless port is already closed.
>
>
> I have a case where I believe that the channel has no buffer, I park a
> "pseudothread" in a go block reading off that channel via <!, and then
> (lexically, not temporally), put to the unbuffered channel via >!!:
>
> (let [c (chan) ;; NO BUFFER!
> d (go (<! c)) ;; park a pseudothread to read c
> e (>!! c 42)] ;; blocking write to c, will unpark c's pseudothread
> (println {:c-coughs-up '(this will hang (<!! c)),
> :d-coughs-up (<!! d),
> :what's-e e})
> (close! c) (close! d))
>
> {:c-coughs-up (this will hang (<!! c)), :d-coughs-up 42, :what's-e true}
>
>
> This case leads me to wonder whether the documentation might read
>
> >!! will block if there is no buffer space available *and* if there is
> no *rendezvous *available, that is, no pseudothread parked waiting for <!.
>
> but it's more likely that I completely misunderstand core.async because I
> just made up the notion of a pseudothread in my struggle to understand!
>
>
>
>
--
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
---
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/clojure/8c187aad-b746-490a-b6f8-3abfcdaa7533%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.