gpt4 book ai didi

go - 多个go例程的一个障碍

转载 作者:数据小太阳 更新时间:2023-10-29 03:11:41 25 4
gpt4 key购买 nike

我正在试验 go routines。

我有一个 go routine 函数执行了 x 次,我想等待所有这些例程在我的 main 函数中继续。我尝试使用 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 range for the line ch[i] = make(chan bool)

第一个问题:

  • 使用 chan 是好的解决方案吗?

第二个问题:

  • 为什么我有这个索引超出范围的错误?

最佳答案

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

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

关于go - 多个go例程的一个障碍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50052010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com