Go 中的数据竞争:为什么它发生在 10-11 毫秒以下?

问题描述

这是我运行的代码

package main

import (
    "fmt"
    "time"
)

const delay = 9 * time.Millisecond

func main() {
    n := 0
    go func() {
        time.Sleep(delay)
        n++
    }()
    fmt.Println(n)
}

这是我使用的命令:

go run -race data_race_demo.go

这是我注意到的行为:

  • delay 设置为 9 毫秒或更低时,始终会检测到数据竞争(程序抛出 Found 1 data race(s)
  • 如果 delay 设置为 12 毫秒或更高,则永远不会检测到数据竞争(程序只是打印 0
  • delay 设置为 10 到 11 毫秒时,数据竞争会间歇性发生(即有时打印 0,有时抛出 Found 1 data race(s)

为什么会在大约 10-11 毫秒发生这种情况?

我在 darwin/amd64 上使用 Go 1.16.3,如果这很重要的话。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)