sync.waitgroup奇怪的地方

tommytian770401 · 2018-01-04 13:55:11 · 1128 次点击

我觉得楼上是正确的,在求和之后再done,否则你的wg只wait到for循环结束,很容易导致求和的goroutine被kill

#5
更多评论

多试几次,不一定是最后一次,结果也不一定是15,你这写法有不确定性,只要每个go协程中的defer wg.Done()执行完sum就会被打印出来,无论ch中的数据有没有全部被读取出来,这个按照你代码执行的一次结果

5
1
4
2
sum is done
12
#1

在最后加一个time.Sleep(6 * time.Second)就一定能看到了,并发协程未执行完导致的问题。

#2