代码
package main
import (
"fmt"
"sync"
)
func main() {
m := make(map[string]int, 1)
const cyclesCount = 10
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
for i := 0; i < cyclesCount; i++ {
m[`foo1`]++
}
}()
go func() {
defer wg.Done()
for i := 0; i < cyclesCount; i++ {
m[`foo`]++
}
}()
wg.Wait()
fmt.Println(m)
}
结果
- 有时候会报
fatal error: concurrent map writes
,有时候可以顺利通过,结果还是正确的 - 如果把cyclesCount 调成1,大概率是可以顺利通过,并且结果还是正确的
结论
还是有datarace的