【发布时间】:2021-05-21 12:14:46
【问题描述】:
这是我运行的代码:
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,如果这很重要的话。
【问题讨论】:
-
“延迟设置为 12 毫秒或更高,永远不会检测到数据竞争”这意味着什么:竞争仍然存在。