为了账号安全,请及时绑定邮箱和手机立即绑定

等待不确定数量的 goroutines

等待不确定数量的 goroutines

Go
拉莫斯之舞 2021-06-22 03:29:09
我有一个代码,其中单个 goroutine 将触发不确定数量的子 goroutine,这反过来将触发更多 goroutine,等等。我的目标是等待所有子 goroutine 完成。我不知道我将提前触发的 goroutine 的总数,所以我不能使用sync.WaitGroup,理想情况下我不必人为地限制通过channel-as-semaphore模式运行的 goroutine 的总数.简而言之,我想在每个 goroutine 中都有一个本地通道或等待组,作为等待其所有子进程的信号量,但这导致每个 goroutine 在其所有后代完成时都在消耗堆栈空间。现在我的想法是在 goroutine 被触发时增加一个原子计数器(在父级中,如果子级在父级完成后开始运行,以避免虚假地为零),当一个 goroutine 完成时递减它,并定期检查它是否相等到零。我基本上是在正确的轨道上,还是有更优雅的解决方案?
查看完整描述

3 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

当然,您可以将其sync.WaitGroup用于您的任务,它实际上非常适合,专为此而设计。您将创建的 goroutine 的数量不是不确定的。它只是一个只有在运行时才知道的值,然后它就被精确地知道。每一条go语句都会创建一个新的 goroutine。这样的go语句之前,无论执行多少次,你都必须做

wg.Add(1)

每个 goroutine 中放入

defer wg.Done()

作为第一个声明。现在你可以做

wg.Wait

等待所有goroutine 完成。


查看完整回答
反对 回复 2021-06-28
  • 3 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信