WaitGroup在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组、团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执行。
先说说WaitGroup的用途:它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成。WaitGroup总共有三个方法:Add(deltaint),Done(),Wait()。简单的说一下这三个方法的作用。
Add:添加或者减少等待goroutine的数量
Done:相当于Add(-1)
wait:执行阻塞,直到所有的WaitGroup数量变成0 packagemain import( "fmt" "sync" ) funccalc(w*sync.WaitGroup,iint){ fmt.Println("calc:",i) w.Done() } funcmain(){ wg:=sync.WaitGroup{} fori:=0;i<10;i++{ wg.Add(1) gocalc(&wg,i) } wg.Wait() fmt.Println("allgoroutinefinish") }运行结果:
calc:6 calc:9 calc:0 calc:8 calc:3 calc:5 calc:2 calc:4 calc:7 calc:1 allgoroutinefinish本文内容总结:
原文链接:https://www.cnblogs.com/itbsl/p/10637769.html