如果我有多個 go 例程同時添加和調(diào)用 done 到等待組。從并發(fā)的角度來看,這安全嗎?我見過的大多數(shù)等待組示例都將添加添加到調(diào)用/創(chuàng)建其他例程的單個 go-routine 中。
1 回答

猛跑小豬
TA貢獻(xiàn)1858條經(jīng)驗 獲得超8個贊
從多個例程調(diào)用是安全的,并且是文檔中Done
推薦的用法。從產(chǎn)生更多例程的 goroutine調(diào)用的原因不是因為它不是線程安全的,而是因為這樣的代碼可能:WaitGroup
Add
Add
for ... {
? ? go func() {
? ? ? ? wg.Add(1)
? ? ? ? defer wg.Done()
? ? ? ? ...
? ? }()
}
wg.Wait()
wg.Wait()可能會在對 的任何調(diào)用執(zhí)行之前到達(dá)Add,此時計數(shù)器仍為零,從而破壞了目的。并發(fā)代碼的執(zhí)行順序是不確定的。
- 1 回答
- 0 關(guān)注
- 137 瀏覽
添加回答
舉報
0/150
提交
取消