package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 1; i <= 10; i++ {
wg.Add(1)
go func(num int) {
defer wg.Done()
fmt.Println(num)
}(i)
}
wg.Wait()
fmt.Println("所有任务完成,主线程继续")
}
WaitGroup相关方法作用
Add(delta int)
:
- 作用:向WaitGroup计数器添加指定的增量
delta
。在启动每个新的并发任务前,通常调用 Add(1)
来表示增加一个需要等待完成的任务。如果 delta
为负数,会减少计数器的值,但如果计数器的值已经为0,调用 Add
会导致运行时恐慌(panic)。
Done()
:
- 作用:标记一个任务已经完成,它等同于
Add(-1)
。通常在每个并发任务的函数内部使用 defer wg.Done()
,确保无论任务以何种方式结束(正常结束或发生错误),都能正确减少WaitGroup的计数器。
Wait()
:
- 作用:阻塞调用它的 goroutine,直到WaitGroup的计数器归零。在主线程中调用
Wait()
,主线程会等待所有调用了 Add
且还未调用 Done
的任务完成后,才会继续执行 Wait
之后的代码。