Golang中的并发控制和Go WaitGroup
在Golang中,可使用并发控制来管理多个goroutine的履行。其中,一个常见的并发控制机制是使用sync.WaitGroup
。sync.WaitGroup
是Golang标准库中的一个结构体,用于等待一组goroutine履行完成。它提供了以下三个方法:
Add(delta int)
:增加等待的goroutine数量,delta为正值表示增加,负值表示减少。Done()
:表示一个goroutine已履行完成,减少等待的goroutine数量。Wait()
:阻塞,直到所有等待的goroutine履行完成。下面是一个使用sync.WaitGroup
的示例:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
fmt.Println("goroutine", i, "done")
}(i)
}
wg.Wait()
fmt.Println("all goroutines done")
}
在上面的示例中,首先创建了一个sync.WaitGroup
实例wg
。然后,使用Add
方法增加了5个等待的goroutine数量。接着,使用go
关键字创建了5个goroutine,每一个goroutine打印了自己的id并调用Done
方法表示履行完成。最后,调用wg.Wait()
方法阻塞,直到所有goroutine履行完成。
需要注意的是,每一个goroutine中一定要调用Done
方法来通知sync.WaitGroup
已完成。否则,Wait
方法会一直阻塞。
使用sync.WaitGroup
可以方便地管理多个goroutine的并发履行,等待它们全部履行完成后再进行下一步操作。
TOP