func sum(a []int, c chan int) {
total := 0
for _, v := range a {
total += v
}
c <- total
}
func main() {
a := []int{7, 2, 8, -9, 4, 0}
c := make(chan int)
go sum(a[:len(a)/2], c) // 17
go sum(a[len(a)/2:], c) // -5
x, y := <-c, <-c
fmt.Println(x, y, x+y)
为什么这段代码,变量x输出的值是-5,而不是17?
有疑问加站长微信联系(非本文作者)
接收就只接收,发送就只发送。
并行会导致乱序
你怎么知道哪个goroutine会先算完?
楼主,你这问题不是必现,我跑了1000次,能出现一两次 17 -5 12
for i in {1..1000}; do GOMAXPROCS=6 go run main.go; done
OK,明白了
@lxzan 懂了,谢谢大佬
多核的情况下,先输出17,还是-5是不确定的,去试试就知道了,不过-5的概率比较大。