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

如果我有多个 go 例程同时添加和调用 done 到等待组。从并发的角度来看,这安全吗?我见过的大多数等待组示例都将添加添加到调用/创建其他例程的单个 go-routine 中。



繁华开满天机
浏览 87回答 1
1回答

猛跑小猪

从多个例程调用是安全的,并且是文档中Done推荐的用法。从产生更多例程的 goroutine调用的原因不是因为它不是线程安全的,而是因为这样的代码可能:WaitGroupAddAddfor ... {    go func() {        wg.Add(1)        defer wg.Done()        ...    }()}wg.Wait()wg.Wait()可能会在对 的任何调用执行之前到达Add,此时计数器仍为零,从而破坏了目的。并发代码的执行顺序是不确定的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go