面试题答案
一键面试WaitGroup实现并发控制基本原理
WaitGroup是Go语言中用于实现并发控制的同步工具。它内部维护一个计数器,通过对计数器的操作来协调多个goroutine的执行。
主要方法
- Add方法
- 作用:用于设置或增加WaitGroup内部计数器的值。
- 工作机制:在启动新的goroutine之前,调用
Add(n)
方法,其中n
为正整数,表示要等待的goroutine数量。每次调用Add
,计数器就会增加n
。如果n
为负数,会导致运行时错误。例如,wg.Add(3)
表示有3个goroutine需要等待。
- Done方法
- 作用:用于将WaitGroup内部计数器减1。
- 工作机制:在每个需要等待的goroutine结束时,调用
wg.Done()
方法,此方法等同于wg.Add(-1)
。通常在goroutine函数的末尾调用,告知WaitGroup该goroutine已完成任务。
- Wait方法
- 作用:阻塞当前goroutine,直到WaitGroup内部计数器的值变为0。
- 工作机制:当一个goroutine调用
wg.Wait()
时,如果计数器的值大于0,该goroutine会被阻塞,放入等待队列。当计数器值由于调用Done
方法减为0时,所有因调用Wait
方法而阻塞的goroutine会被唤醒继续执行。