sync.waitgroup奇怪的地方

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

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

#2
更多评论

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

5
1
4
2
sum is done
12
#1

如果直接用[]chan是可以解决问题的,那么再请教一下在这种chan和waitgroup混用的思路下,该如何解决这个问题呢?

#3