* Konstantin Shaposhnikov <k.shaposhni...@gmail.com> [160820 06:34]: > The code might be race free for the current Go implementation but I don't > think this behaviour is documented. > > https://golang.org/ref/mem doesn't mention sync.WaitGroup at all. So > wg.Done() doesn't necessarily happen before wg.Wait() returns and the > effect of writing to "result" could be not visible after wg.Wait().
I don't believe that https://golang.org/ref/mem should necessarily be required to mention every library routine that guarantees a happens-before relationship. It should document the lowest-level language features, and then the documentation for the library routines should make a claim that their implementations guarantee such a relationship. For sync.WaitGroup, the documentation says "A WaitGroup waits for a collection of goroutines to finish." For func (*WaitGroup) Wait, the documentation says "Wait blocks until the WaitGroup counter is zero." Perhaps the documentation should explicitly mention the Go Memory Model and state that it is implemented in such a way that a happens-before relationship exists, but what would be the purpose of WaitGroup if it didn't guarantee such a relationship? I believe the happens-before relationship is implied by the current documentation and the intended use-case for WaitGroup, even if it is not explicitly stated. I agree with others in this thread who have stated that there is no race condition. I disagree with the implication that WaitGroup, as documented, could be implemented differently in such a way as to both conform to the Go 1 compatibility promise and fail to provide an appropriate happens-before relationship. ...Marvin -- 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.