Thanks, everyone, for your answers! I think I understand what 
sync.WaitGroup is doing now.

Jon

On Friday, April 27, 2018 at 7:29:50 AM UTC-4, rog wrote:
>
> On 26 April 2018 at 16:29, Jon Bodner <j...@bodnerfamily.com <javascript:>> 
> wrote: 
> > Hello, 
> > 
> > We were having a discussion at work about passing around references to 
> > sync.WaitGroup. I said it was a bad idea, because if a goroutine 
> launched a 
> > goroutine of its own and called sync.WaitGroup.Add() after a goroutine 
> > called sync.WaitGroup.Wait(), but before the count dropped to 0, your 
> code 
> > would panic. The comments seem to support this: 
> > 
> > "If a WaitGroup is reused to wait for several independent sets of 
> events, 
> > new Add calls must happen after all previous Wait calls have returned." 
> > 
> > And the WaitGroup source code for Add has lines like this: 
> > 
> > if w != 0 && delta > 0 && v == int32(delta) { 
> > panic("sync: WaitGroup misuse: Add called concurrently with Wait") 
> > } 
> > 
> > But a co-worker wrote this code, and it runs without a panic: 
> > https://play.golang.org/p/NjqK_YoqHeH 
>
> FWIW This code is fine, and was part of the original design goal of 
> WaitGroup. When the count is known to be non-zero (for example because 
> the current goroutine has previously done an Add) it's OK to call Add 
> to add more. 
>
> The key in the above quote is "If a WaitGroup is reused to wait for 
> several independent sets of events". If you're reusing a WaitGroup, 
> this makes sense, but in the example above, the WaitGroup is not 
> reused so all is good. 
>
> As for the panic, others have already explained how that might happen. 
>

-- 
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.

Reply via email to