面试题答案
一键面试WaitGroup基本工作原理
- 计数器:
WaitGroup
内部维护着一个计数器。当调用Add(delta int)
方法时,计数器会增加delta
个值。这个计数器用于表示需要等待完成的任务数量。 - 阻塞与唤醒:调用
Wait()
方法时,当前 goroutine 会被阻塞,直到计数器的值变为0。当一个任务完成时,需要调用Done()
方法,该方法内部实际上是调用了Add(-1)
,将计数器减1。当计数器变为0时,所有因调用Wait()
而阻塞的 goroutine 会被唤醒并继续执行。
忘记调用Add方法的情况
如果在使用 WaitGroup
时忘记调用 Add
方法,会导致计数器初始值为0。那么调用 Wait()
方法时,由于计数器已经是0,该方法不会阻塞,会立即返回。这会使得原本期望等待所有任务完成的逻辑失效,可能会导致程序在相关任务未完成时就继续执行后续逻辑,从而产生数据不一致或其他错误结果。