这是我运行的代码:
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
设置为 9ms 或更低,始终检测到数据竞争(程序抛出Found 1 data race(s)
)- 设置为 12ms 或更高,永远不会检测到
delay
数据竞争(程序简单地打印0
) - 设置为 10到
delay
11ms 时,数据竞争会间歇性发生(即有时会打印0
,有时会抛出Found 1 data race(s)
)
为什么会在 10-11ms 左右发生这种情况?
如果这很重要,我正在使用 Go 1.16.3 darwin/amd64
。