多个go例程的一个障碍

One barrier for multiple go routines

我正在试验 go 例程。

我有一个 go 例程函数执行了 x 次,我想等待所有这些例程在我的主函数中继续。我尝试使用chan作为屏障。

我试过类似的东西:

func goroutine(i int, ch []chan bool) {
    //do stuff
    ch[i] <- true
}

func main() {
    var ch []chan bool
    for i := 0; i < nb; i++ {
        ch[i] = make(chan bool)
        go goroutine(i, ch)
    }

    // wait to continue
    for i := 0; i < nb; i++ {
         <- ch[i]
    }
}

我有以下错误:panic: runtime error: index out of rangech[i] = make(chan bool)

第一个问题:

第二个问题:

如果您只想等待 goroutine 完成并且不需要通过通道返回结果,那么 sync.WaitGroup 将是一个更简洁的解决方案。可行的方法是:

  • 创建一个 WaitGroup wg,每当您启动 goroutine 调用时 wg.Add(1) 并将指向 wg 的指针传递给 goroutine。
  • 在goroutine中,返回调用前wg.Done()
  • 要等待所有 goroutine 完成,请调用 wg.Wait()