Waitgroup用法
目录
1 main线程不知道gorutine什么时候退出
为了让main
线程不在 gorutine
运行过程中就退出,用time.Sleep(time.Second)
,保证main
线程不立即退出
|
|
2 channel同步信号量
实际开发中,往往难以预测orutine
的运行时间,最好的方式是,函数运行完就给出一个信号,可以使用channel
来作为程序的同步信号量
|
|
3 WaitGroup 等待一组任务完成
使用channel
来作为程序的同步信号量并不是最好的方式,go
提供了一个工具sync.WaitGroup
。WaitGroup
内部维护了一个计数器,它有三个方法,分别是Add()、done()、wait()
,Add(n)
把计数器设置为n
,Done()
每次把计数器-1
,wait()
会阻塞代码的运行,直到计数器地值减为0。
|
|
WaitGroup
对象通过函数传值时,必须传地址
|
|