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

在sync.Map中检测到数据竞争条件 - Golang

在sync.Map中检测到数据竞争条件 - Golang

Go
富国沪深 2023-08-14 14:41:31
我使用 go tool 参数运行测试-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)        }()    }}我不明白,因为根据文档,Map [...] 对于多个 goroutine 并发使用是安全的,无需额外的锁定或协调。
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

比赛正在进行中i。通过将值传递给函数而不是引用单个局部变量来修复:


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另一种选择是在循环内声明另一个变量:


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)

        }()

    }

}


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

添加回答

举报

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