My understanding of channels is they basically create exclusion by control of the path of execution, instead of using callbacks, or they bottleneck via the cpu thread which is the reader and writer of this shared data anyway.
I think the way they work is that there is queues for read and write access based on most recent, so when a channel is loaded, the most proximate (if possible same) thread executes the other side of the channel, and then if another thread off execution bumps into a patch involving accessing the channel, if the channel is full and it wants to fill, it is blocked, if it wants to unload, and it's empty, it is blocked, but the main goroutine scheduler basically is the gatekeeper and assigns exeuction priority based on sequence and first available. So, if that is correct, then the version with the load after the goroutine and unload at the end of the goroutine functions to grab the thread of the channel, and when it ends, gives it back, and if another is ready to use it, it is already lined up and the transfer is made. So any code I wrap every place inside the goroutine/unload-load pattern (including inside itself) can only be run by one thread at once. If you ask me, that's better and more logical than callbacks. On Sunday, 17 March 2019 11:05:35 UTC+1, Jan Mercl wrote: > > > On Sun, Mar 17, 2019 at 10:49 AM Louki Sumirniy <louki.sumir...@gmail.com > <javascript:>> wrote: > > > I just ran into my first race condition-related error and it made me > wonder about how one takes advantage of the mutex properties of channels. > > I'd not say there are any such properties. However, it's easy to implement > a semaphore with a channel. And certain semaphores can act as mutexes. > > > If I understand correctly, this is a simple example: > > That example illustrates IMO more of a condition/signal than a typical > mutex usage pattern. > > -- > > -j > -- 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. For more options, visit https://groups.google.com/d/optout.