在Go语言中, sync.WaitGroup
是一种用于等待一组goroutine完成执行的同步原语。它允许您协调和同步多个goroutine的执行。
下面是对 sync.WaitGroup
的详细解释:
创建
sync.WaitGroup
:要使用sync.WaitGroup
,需要使用sync.WaitGroup{}
语法创建一个实例。将goroutine添加到等待组:在启动goroutine之前,使用
Add()
方法将其添加到等待组。这会增加等待组的内部计数器。Goroutine的执行:每个goroutine在完成执行时应调用等待组的
Done()
方法。这会减少等待组的内部计数器。等待goroutine完成:主goroutine或其他需要等待其他goroutine完成的goroutine可以调用等待组的
Wait()
方法。这会阻塞执行,直到等待组的内部计数器变为零。
以下是一个示例,演示了如何使用 sync.WaitGroup
:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
// 添加2个goroutine到等待组
wg.Add(2)
go func() {
defer wg.Done()
fmt.Println("Goroutine 1")
}()
go func() {
defer wg.Done()
fmt.Println("Goroutine 2")
}()
// 等待所有goroutine完成
wg.Wait()
fmt.Println("All goroutines completed")
}
在上面的示例中,我们创建了一个 sync.WaitGroup
实例,并使用 Add()
方法将两个goroutine添加到等待组。每个goroutine在完成执行时调用 Done()
方法。然后,主goroutine调用 Wait()
方法来等待所有的goroutine完成。一旦所有的goroutine都完成了执行,就会打印"All goroutines completed"。
通过使用 sync.WaitGroup
,我们可以有效地等待和同步多个goroutine的执行,确保在继续执行之前,所有需要等待的goroutine都已经完成。