Can sync.WaitGroup
be reused after Wait()
is called?
func worker(who string, in <-chan int, wg *sync.WaitGroup) {
for i := range in {
fmt.Println(who, i)
wg.Done()
}
}
func main() {
var wg sync.WaitGroup
AIn := make(chan int, 1)
BIn := make(chan int, 1)
go worker("a:", AIn, &wg)
go worker("b:", BIn, &wg)
for i := 0; i < 4; i++ {
wg.Add(2)
AIn <- i
BIn <- i
wg.Wait()
fmt.Println("main:", i)
}
}
This play.golang.org/p/QLsvA-b4Ae runs as expected, but is it guaranteed to be safe? The documentation doesn't say so, but maybe I'm just being paranoid.