1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 代码如下: 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是否会有问题?
谢谢!