如果我有多个 go 例程同时添加和调用 done 到等待组。从并发的角度来看,这安全吗?我见过的大多数等待组示例都将添加添加到调用/创建其他例程的单个 go-routine 中。
1 回答
猛跑小猪
TA贡献1858条经验 获得超8个赞
从多个例程调用是安全的,并且是文档中Done
推荐的用法。从产生更多例程的 goroutine调用的原因不是因为它不是线程安全的,而是因为这样的代码可能:WaitGroup
Add
Add
for ... {
go func() {
wg.Add(1)
defer wg.Done()
...
}()
}
wg.Wait()
wg.Wait()可能会在对 的任何调用执行之前到达Add,此时计数器仍为零,从而破坏了目的。并发代码的执行顺序是不确定的。
- 1 回答
- 0 关注
- 86 浏览
添加回答
举报
0/150
提交
取消