Golang中的并发控制和Go WaitGroup

avatar
作者
筋斗云
阅读量:0

在Golang中,可以使用并发控制来管理多个goroutine的执行。其中,一个常见的并发控制机制是使用sync.WaitGroup

sync.WaitGroup是Golang标准库中的一个结构体,用于等待一组goroutine执行完成。它提供了以下三个方法:

  1. Add(delta int):增加等待的goroutine数量,delta为正值表示增加,负值表示减少。

  2. Done():表示一个goroutine已经执行完成,减少等待的goroutine数量。

  3. 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的并发执行,等待它们全部执行完成后再进行下一步操作。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!