谁能帮忙解释一段并发代码的诡异结果

star24 · · 3283 次点击
qkb_75_go
琴为心声
我 加上打印时间,反复验证了多次,这个问题会 偶尔出现。规律如下:除非全部gouroutine都进入 死循环,整体才会挂死;不信你可以在 make(chan ,MULTICORE) 变为非堵塞chan,则每次都会挂死,一定会挂死了。所以这个不是 golang 的 bug,而是每次都在不同调度。
#7
更多评论
问题应该是你的死循环问题上面.运行死循环占用大量cpu资源,这时候其他任务就不能正常执行,因此会出现程序"死亡"状态.该程序删掉j的死循环便可正常执行.
#1
有结果输出也是有可能的,ch <- subSum 是在死循环前,主goroutine是可以到,幸运的话还是输出结果的;要是有一个或者多个gorountine跑到了死循环, 这种空转cpu肯定回100%,还会导致其他goroutine没法执行
#2