首先要知道的是:报错的原因wg.Done()源码是wg.Add(-1),最终导致wg中任务数小于0而报错。 C是先加任务数后减任务数,所以不会报错;B是先减后加,所以必定报错;A和D中wg.Done()和wg.Add(1)存在竞争关系,而我们常规测试不报错的原因是创建新协程的速度肯定不及当前协程运行的速度,所以主协程的wg.Add(1)大概率会比子协程的wg.Done()先执行。如果在wg.Add(1)前加入time.Sleep(time.Second),则一定会保证。 PS:我怀疑你自己都没测试,wg都没初始化。。。
1 1

相关推荐

牛舌:如果我不想去,不管对方给了多少,我一般都会说你们给得太低了。这样他们就会给下一个offer的人更高的薪资了。
点赞 评论 收藏
分享
牛客网
牛客企业服务