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