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分配一个更大的数字(比如1000000)时,输出将是一个随机数比n。Golang - 为什么这种竞争条件发生?
我还没有调用runtime.GOMAXPROCS(),所以这两个goroutines不能并行运行。当我使用go run -race
来检测竞争状态时,没有任何竞争状态警告。
为什么这种竞赛状态会发生?
为什么你觉得这个代码不具备竞争条件? goroutine与for循环同时运行,并且没有执行同步。 –