package main
import "fmt"
var quit chan int
var glo int
func test() {
fmt.Println(glo)
}
func main() {
glo = 0
n := 10000
quit = make(chan int, n)
go test()
for {
quit <- 1
glo++
}
}
情况:
上面的程序输出 10000。但是当我为n分配一个更大的数字(例如n := 1000000)时,输出将是一个小于 n的随机数。
我没有调用runtime.GOMAXPROCS(),所以这两个 goroutine 不能并行运行。执行go run -race以检测竞争条件,最终没有任何警告。
题:
为什么会出现这种竞争条件?
慕的地6264312
相关分类