Go语言中的WaitGroup
Go语言sync包中的WaitGroup可以有效解决goroutine未执行完成,而主程序执行完成导致程序结束的问题。
Go语言标准库中WaitGroup只有三个方法:
- Add(delta int)表示向内部计数器添加增量(delta),其中参数delta可以是负数
- Done()表示减少WaitGroup计数器的值,应当在程序最后执行.相当于Add(-1)
- Wait()表示阻塞直到WaitGroup计数器为0
代码示例:
package main
import (
"fmt"
"sync"
)
func demo(index int) {
for i := 1; i <= 5; i++ {
fmt.Printf("第%d次执行,i的值为:%d\n", index, i)
}
wg.Done()
}
var wg sync.WaitGroup
func main() {
for i := 1; i <= 3; i++ {
wg.Add(1)
go demo(i)
}
fmt.Println("开始阻塞")
//阻塞,直到WaitGroup队列中所有任务执行结束时自动解除阻塞
wg.Wait()
fmt.Println("任务执行结束,解除阻塞")
}