这是我运行的代码:
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
以下是我注意到的行为:
设置为 9ms 或更低时,始终会检测到数据争用(程序抛出delayFound 1 data race(s))
设置为 12ms 或更高时,永远不会检测到数据竞速(程序只是打印delay0)
设置为 10 到 11 毫秒时,数据争用会间歇性地发生(即,有时打印,有时抛出delay0Found 1 data race(s))
为什么这种情况发生在10-11ms左右?
我正在使用Go 1.16.3,如果这很重要的话。darwin/amd64
开满天机
相关分类