Hi Gophers!
I'm trying to understand line 522 of src/runtime/sema.go
<https://golang.org/src/runtime/sema.go?h=runtime_notifyListNotifyAll#L522>:
if atomic.Load(&l.wait) == atomic.Load(&l.notify) {
>
> ...
I can't help but thinking, what guarantee that the atomic read of l.wait
won't return stale value, making the signaler abandons their current
signaling attempt, leaving current waiters to be blocked forever if the
same signaler won't return again or there's no other signaler in the future
at all?
I think I'm missing something crucial here because I am perfectly aware
that reasoning about synchronization is hard, especially for someone in the
process of learning like me. Could someone point that out to me?
Thanks so much.
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.