首先要知道的是:报错的原因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

相关推荐

诨号无敌鸭:恭喜佬,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
牛客网
牛客企业服务