I like this question, as a fun puzzle to solve. Bryan's approach is similar to how I am thinking about it.
Reading his code (https://go.dev/play/p/BpLBYsSSqn2?v=gotip), however, I think there are some issues: 1) What if there are two simultaneous calls to Broadcast that end up closing the same channel (on line 46) twice? A panic would ensue due to the double close. (I've long felt that this was a poor choice in Go's channel design, a double close should really be fine -- the current design means that you almost always have to protect a close() with a separate mutex, and check if the close has already happened first). 2) What Signal and Broadcast are called at the same time, and the lines are interleaved 36, 45, 46, 38: you would get a panic from trying to send on a closed channel, right? On Thursday, January 18, 2024 at 5:23:45 PM UTC+1 Bryan C. Mills wrote: > Now with tests (copied from > https://cs.opensource.google/go/go/+/master:src/sync/cond_test.go;drc=4a3071696ddfb13e1a8f35f76197b7b3143492f4 > ): > https://go.dev/play/p/BpLBYsSSqn2?v=gotip > > On Wednesday, January 17, 2024 at 5:38:18 PM UTC-5 Bryan C. Mills wrote: > >> Perhaps something like this: >> https://go.dev/play/p/wllkgRAtd4a >> >> Disclaimer: not yet tested, probably contains bugs. >> Also, I strongly _disrecommend_ the use of condition variables, because >> they're too bug-prone. 🙃 >> >> On Friday, January 12, 2024 at 2:48:09 PM UTC-5 Rochus Keller wrote: >> >>> > Something like this? https://go.dev/play/p/_H3kFjprAGG >>> >>> No, sorry. The goal is to emulate a full monitor just with channels, as >>> demonstrated in the referenced text (see the Stack example). The Mutex is >>> likely correct, but the Signal has yet to pass the scrutinity of the folks >>> here. >>> >>> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/48c87e60-d98d-40b3-a514-78db8fd36237n%40googlegroups.com.