WaitGroup
程序员文章站
2022-05-25 17:36:47
`WaitGroup`在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组、团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执行。 先说说WaitGroup的用途: 它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所 ......
waitgroup
在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组、团队的意思,waitgroup就是指等待一组,等待一个系列执行完成后才会继续向下执行。
先说说waitgroup的用途:它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成。
waitgroup总共有三个方法:add(delta int),done(),wait()。简单的说一下这三个方法的作用。add
: 添加或者减少等待goroutine的数量done
: 相当于add(-1)wait
: 执行阻塞,直到所有的waitgroup数量变成0
package main import ( "fmt" "sync" ) func calc(w *sync.waitgroup, i int) { fmt.println("calc:", i) w.done() } func main() { wg := sync.waitgroup{} for i := 0; i < 10; i++ { wg.add(1) go calc(&wg, i) } wg.wait() fmt.println("all goroutine finish") }
运行结果:
calc: 6 calc: 9 calc: 0 calc: 8 calc: 3 calc: 5 calc: 2 calc: 4 calc: 7 calc: 1 all goroutine finish