面试题答案
一键面试WaitGroup实现并发控制原理
WaitGroup
通过内部计数器来实现并发控制。当一个goroutine
需要等待一组goroutine
完成时,它可以使用WaitGroup
。创建WaitGroup
实例后,通过Add
方法设置需要等待的goroutine
数量,每个要等待的goroutine
在开始时调用Add
增加计数器,完成任务后调用Done
方法减少计数器,主goroutine
调用Wait
方法阻塞,直到计数器归零,即所有相关goroutine
都完成任务。
主要方法及其作用
Add(delta int)
- 作用:增加
WaitGroup
计数器的值。delta
为增加的数量,可以是正数或负数,但通常使用正数。一般在启动新的goroutine
之前调用,用来表示需要等待的goroutine
数量。例如,若要启动3个goroutine
,可以调用wg.Add(3)
。
- 作用:增加
Done()
- 作用:将
WaitGroup
计数器的值减1。通常在一个goroutine
完成其任务时调用,等同于wg.Add(-1)
。它告诉WaitGroup
这个goroutine
已经完成工作。
- 作用:将
Wait()
- 作用:阻塞当前
goroutine
,直到WaitGroup
的计数器归零。一般在主goroutine
或需要等待其他goroutine
完成的goroutine
中调用,使得调用者等待所有相关goroutine
执行完毕后再继续执行后续代码。
- 作用:阻塞当前