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循環同時運行,並且沒有執行同步。 –