您的位置:首页 > 编程语言 > Go语言

一道看似简单的go程序的深入分析

2018-07-04 10:26 295 查看
先上代码:

func main() {
var a [10]int
for i := 0; i < 10; i++ {
go func(i int) {
for {
a[i]++
}
}(i)
}
time.Sleep(time.Millisecond)
fmt.Println(a)
}

运行后估计大部分电脑是死循环(cpu核数大于10的会输出结果)

8核的可能有时能输出结果:7个大于0的数和3个0

有时是死循环

原因分析:

goroutine是非抢占式的 除非主动交出控制权

goroutine可能合用一个线程

由于这两个原因导致结果是不确定的 除非cpu核数大于10

补充:

goroutine在下列情况下可能会交出控制权:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Go