代码如下:
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是否会有问题?
谢谢!