MST

星途 面试题库

面试题:Go中WaitGroup并发调试之基础理解

在Go语言中,简述WaitGroup的基本工作原理。如果在使用WaitGroup时忘记调用 `Add` 方法会出现什么情况?
23.1万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

WaitGroup基本工作原理

  1. 计数器WaitGroup 内部维护着一个计数器。当调用 Add(delta int) 方法时,计数器会增加 delta 个值。这个计数器用于表示需要等待完成的任务数量。
  2. 阻塞与唤醒:调用 Wait() 方法时,当前 goroutine 会被阻塞,直到计数器的值变为0。当一个任务完成时,需要调用 Done() 方法,该方法内部实际上是调用了 Add(-1),将计数器减1。当计数器变为0时,所有因调用 Wait() 而阻塞的 goroutine 会被唤醒并继续执行。

忘记调用Add方法的情况

如果在使用 WaitGroup 时忘记调用 Add 方法,会导致计数器初始值为0。那么调用 Wait() 方法时,由于计数器已经是0,该方法不会阻塞,会立即返回。这会使得原本期望等待所有任务完成的逻辑失效,可能会导致程序在相关任务未完成时就继续执行后续逻辑,从而产生数据不一致或其他错误结果。