代码如下: package main import ( "fmt" "runtime" ) func test(c chan bool, n int) { x := 0 for i := 0; i < 100000000; i++ { x += i } fmt.Println(n, x) if n == 5 { c <- true } } func main() { runtime.GOMAXPROCS(1) c := make(chan bool) for i := 0; i < 10; i++ { go test(c, i) } <-c fmt.Println("main ok") }
执行结果如下:
9 4999999950000000
0 4999999950000000
1 4999999950000000
2 4999999950000000
3 4999999950000000
4 4999999950000000
5 4999999950000000
main ok
请分析为什么结果第一行是9 4999999950000000?当
if n == 9 {
c <- true
}时,执行结果为什么是:
9 4999999950000000
main ok ?
多个goroutine共用一个chan是否会有问题?
谢谢!