On Tue, Aug 08, 2017 at 03:39:42AM -0700, snmed wrote:
> > There are trade-offs.
> > Channels are easy to use for simple things, but complicated for complected
> > things.
> > Locking data-structures can easily introduce data-races (see The Little
> > Book of Semaphores http://greenteapress.com/wp/semaphores/).
> Thank you for your reply, I myself used channel as a semaphore, i'm not
> sure if that is a appropriate use case for channels.
Channels are quite good to implement simple counting semaphores (those
which have more than a single token / permit to provide): the length of
the channel used in this way is the quantity of permits the semaphore
has, a send to such channel is acquisition of a permit, and receiving
from it returning of the acquired permit back to the semaphore.
Acquisition hence naturally blocks if the semaphore has no free permits
and blocks the requesting goroutine until a free permit becomes
You can easily combine this with a timer to get a counting semaphore
with a timeout.
You received this message because you are subscribed to the Google Groups
To unsubscribe from this group and stop receiving emails from it, send an email
For more options, visit https://groups.google.com/d/optout.