Skip to content

WaitGroup

本质上应该是信号量

基本操作

  • Add添加任务
  • Done标记一个任务的完成
  • Wait阻塞当前Go协程,直到信号量大等于0的时候继续执行

注意

go
type WaitGroup struct {
	noCopy noCopy
	state atomic.Uint64
	sema uint32
}

可以看到,关于信号量的递增或者递减是原子操作,且不允许WaitGroup进行复制的操作 —— 因为复制之后会导致计数器不准确

所以在传递WaitGroup的时候,只能传递指针类型,指向我们需要的WaitGroup

Released under the MIT License.