WaitGroup..Done()
时间: 2023-06-21 07:07:12 浏览: 52
WaitGroup是Go语言中的一个同步原语,用于等待一组Go协程执行完毕。它可以阻塞主协程的执行,直到所有的Go协程都执行完毕。而Done()方法则是在每个协程执行完毕时调用,以通知WaitGroup计数器减1。
例如,当我们有多个协程需要执行某些操作,并且需要等待它们全部执行完毕后才能进行下一步操作时,可以使用WaitGroup来实现同步。具体的使用方法如下:
```go
import "sync"
func main() {
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1) // 添加一个协程计数
go func() {
// 执行一些操作
wg.Done() // 协程执行完毕,计数减1
}()
}
wg.Wait() // 等待所有协程执行完毕
// 所有协程都执行完毕,进行下一步操作
}
```
在上面的例子中,我们创建了一个WaitGroup,并循环创建了10个协程,每个协程执行完毕后调用了Done()方法。最后调用了Wait()方法等待所有协程执行完毕。
相关问题
golang sync.WaitGroup
`sync.WaitGroup` 是 Go 语言中的一个同步原语,用于等待一组并发操作完成后再继续执行。具体使用方法如下:
1. 首先,创建一个 `sync.WaitGroup` 实例,可以通过 `var wg sync.WaitGroup` 的方式创建。
2. 然后,在每个并发操作开始前,调用 `wg.Add(1)` 方法,表示需要等待一个操作完成。
3. 在每个并发操作结束时,调用 `wg.Done()` 方法,表示一个操作完成。
4. 最后,调用 `wg.Wait()` 方法,等待所有的并发操作完成。
示例代码:
```go
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
fmt.Println("start", i)
// 模拟耗时操作
time.Sleep(time.Second)
fmt.Println("end", i)
}(i)
}
wg.Wait()
fmt.Println("all done")
}
```
运行结果:
```
start 0
start 1
start 2
start 3
start 4
end 0
end 1
end 3
end 2
end 4
all done
```
go WaitGroup
WaitGroup 是 Go 语言中的一个类型,它可以用来等待一组并发任务的完成。它是由 sync 包提供的。
使用 WaitGroup 时,我们需要在开始执行并发任务之前调用 `Add` 方法来设置等待的任务数量。然后,在每个并发任务完成后,我们需要调用 `Done` 方法来通知 WaitGroup 已经完成了一个任务。最后,我们可以调用 `Wait` 方法来等待所有任务完成。
下面是一个简单的例子:
```
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
// 并发任务1
}()
go func() {
defer wg.Done()
// 并发任务2
}()
wg.Wait()
// 在这里等待所有并发任务完成
```
WaitGroup 还有其他的方法,例如 `Add` 和 `Done` 的变体 `Add` 和 `Done`,可以用来设置或减少等待的任务数量。有关 WaitGroup 的更多信息,可以参考 Go 语言的官方文档。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)