为了账号安全,请及时绑定邮箱和手机立即绑定

从多个 goroutine 添加到等待组是否安全?

从多个 goroutine 添加到等待组是否安全?

Go
繁华开满天机 2023-05-15 15:23:29
如果我有多个 go 例程同时添加和调用 done 到等待组。从并发的角度来看,这安全吗?我见过的大多数等待组示例都将添加添加到调用/创建其他例程的单个 go-routine 中。
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

从多个例程调用是安全的,并且是文档中Done推荐的用法。从产生更多例程的 goroutine调用的原因不是因为它不是线程安全的,而是因为这样的代码可能:WaitGroupAddAdd


for ... {

    go func() {

        wg.Add(1)

        defer wg.Done()

        ...

    }()

}

wg.Wait()

wg.Wait()可能会在对 的任何调用执行之前到达Add,此时计数器仍为零,从而破坏了目的。并发代码的执行顺序是不确定的。


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信