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

star24 · · 3596 次点击
这是因为其他goroutine运行的cpu资源占用还不是很多,并未达到使系统挂掉的程度,而你最后一个goroutine执行完,<-ch得以释放,主程序就结束了,所以没问题.你如果想要验证这个问题就在主程序最后加上一个sleep时间,让其他goroutine可以运行一下,占用cpu资源,便会发现每次程序都会挂掉.
#12
更多评论
问题应该是你的死循环问题上面.运行死循环占用大量cpu资源,这时候其他任务就不能正常执行,因此会出现程序"死亡"状态.该程序删掉j的死循环便可正常执行.
#1
有结果输出也是有可能的,ch <- subSum 是在死循环前,主goroutine是可以到,幸运的话还是输出结果的;要是有一个或者多个gorountine跑到了死循环, 这种空转cpu肯定回100%,还会导致其他goroutine没法执行
#2