📅  最后修改于: 2023-12-03 15:31:01.140000             🧑  作者: Mango
WaitGroup
是Golang并发编程中一个重要的开发工具,它可以让你在一个goroutine中启动多个goroutine,等待它们完成后再进行下一步操作。
在Golang中,一个goroutine通常是一个轻量级的线程,它可以被快速的创建和销毁。WaitGroup
可以帮助我们协调多个goroutine,让它们在不同的时间内同时执行。
我们常常需要在程序中启动数个goroutine并等待它们全部完成后再执行下一步操作,这时候我们可以使用 WaitGroup
来实现。
在使用 WaitGroup
时,我们需要初始化一个 WaitGroup ,调用 Add()
方法来设定计数器的初始值,每个goroutine完成时需要调用 Done()
方法以通知计数器减一,而主函数可以调用 Wait()
方法来暂停等待所有的 goroutine 完成。
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
// do something...
}(i)
}
wg.Wait()
在上述例子中,我们启动了10个goroutine,每次启动的时候都调用 Add(1)
,表示计数器的值加一。每个goroutine完成后都会调用 Done()
方法,表示计数器的值减一。主函数中的 Wait()
方法会阻止主函数的退出,直到计数器的值归零。
用于增加计数器的值,delta表示增加的值,delta可以为负数表示减少计数器的值。
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
// do something...
}()
go func() {
defer wg.Done()
// do something...
}()
wg.Wait()
在上述例子中,我们调用了两次 Add()
,表示计数器的初始值为2。两个goroutine完成后会调用 Done()
方法,计数器减少2个,主函数才会退出执行。
用于减少计数器的值,每次减少1。主要在goroutine完成操作后调用。如果计数器减少到0,所有通过 Wait()
方法阻塞的goroutine都会解除阻塞继续执行。
主要是在主函数中使用,调用 Wait()
方法会阻塞当前 goroutine 直到计数器归零,所有被 Add()
的 goroutine 完成的时候会调用 Done()
方法以减少计数器的值。
WaitGroup
是一种非常简单而有效的调度机制,让多个goroutine可以同步地执行任务。通过 Add()
来设定计数器的初始值, Done()
来减少计数器的值并通知主函数,最后在主函数中调用 Wait()
方法等待所有的goroutine都完成任务。