Golang 协程同步:WaitGroup 实现多个协程执行完后再执行
可以使用 sync 包中的 WaitGroup 来实现多个协程执行后等待所有协程完成再执行的需求。
WaitGroup 是一个计数信号量,用来统计协程的数量。可以通过 Add 方法来增加计数,通过 Done 方法来减少计数,通过 Wait 方法来等待协程计数为 0。
下面是一个使用 WaitGroup 的示例代码:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
fmt.Println("goroutine", i, "start")
// do something
fmt.Println("goroutine", i, "end")
}(i)
}
wg.Wait()
fmt.Println("all goroutines finished")
}
在这个例子中,首先创建了一个 WaitGroup 对象 wg,然后通过 for 循环创建了 10 个协程,并且增加了计数器。在协程内部,执行完任务后通过 Done 方法来减少计数器。
最后在主协程中调用 Wait 方法,等待所有协程的计数器为 0,然后输出 "all goroutines finished"。
原文地址: https://www.cveoy.top/t/topic/lCA1 著作权归作者所有。请勿转载和采集!