Golang 协程管理:WaitGroup 实现并发执行与等待
可以使用 WaitGroup 来实现多个协程执行并等待所有协程完成后再执行。WaitGroup 是一个计数器,用来记录还有多少个协程没有完成。当每个协程完成时,将计数器减一,当计数器为 0 时,说明所有协程都已经完成,可以继续执行后续操作。
下面是一个使用 WaitGroup 的示例代码:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 1; i <= 10; i++ {
wg.Add(1)
go func(index int) {
defer wg.Done()
fmt.Println('协程', index, '开始执行')
// 模拟协程执行时间
for j := 1; j <= 100000000; j++ {}
fmt.Println('协程', index, '执行完成')
}(i)
}
// 等待所有协程执行完成
wg.Wait()
fmt.Println('所有协程执行完成')
}
在这个例子中,我们启动了 10 个协程,每个协程都会执行一个简单的任务,最后等待所有协程执行完成后输出一条消息。在每个协程中,我们调用了 wg.Add(1) 来增加计数器的值,表示有一个新的协程需要执行。在协程执行完成后,我们使用 defer wg.Done() 来将计数器减一,表示这个协程已经完成了。
在主函数中,我们使用 wg.Wait() 来等待所有协程执行完成。当计数器的值为 0 时,Wait 函数会返回,程序继续执行后续操作。
以上就是使用 WaitGroup 来实现多个协程执行并等待所有协程完成的方法。
原文地址: https://www.cveoy.top/t/topic/lCAT 著作权归作者所有。请勿转载和采集!