我使用 go tool 參數(shù)運(yùn)行測(cè)試-race,輸出--- FAIL: TestRaceCondition (0.00s)? ? testing.go:853: race detected during execution of testfunc TestRaceCondition(t *testing.T) {? ? var map sync.Map? ? for i := 0; i < 10; i++ {? ? ? ? go func() {? ? ? ? ? ? map.Store(strconv.Itoa(i), nil)? ? ? ? }()? ? }}我不明白,因?yàn)楦鶕?jù)文檔,Map [...] 對(duì)于多個(gè) goroutine 并發(fā)使用是安全的,無需額外的鎖定或協(xié)調(diào)。
1 回答

HUH函數(shù)
TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超4個(gè)贊
比賽正在進(jìn)行中i。通過將值傳遞給函數(shù)而不是引用單個(gè)局部變量來修復(fù):
func TestRaceCondition(t *testing.T) {
var map sync.Map
for i := 0; i < 10; i++ {
go func(i int) {
map.Store(strconv.Itoa(i), nil)
}(i)
}
}
i另一種選擇是在循環(huán)內(nèi)聲明另一個(gè)變量:
func TestRaceCondition(t *testing.T) {
var map sync.Map
for i := 0; i < 10; i++ {
i := i // each goroutine sees a unique i variable.
go func() {
map.Store(strconv.Itoa(i), nil)
}()
}
}
- 1 回答
- 0 關(guān)注
- 134 瀏覽
添加回答
舉報(bào)
0/150
提交
取消