MST

星途 面试题库

面试题:Go中WaitGroup如何实现并发控制

请简要阐述Go语言中WaitGroup是如何实现并发控制的,包括它的主要方法及其作用。
35.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

WaitGroup实现并发控制原理

WaitGroup通过内部计数器来实现并发控制。当一个goroutine需要等待一组goroutine完成时,它可以使用WaitGroup。创建WaitGroup实例后,通过Add方法设置需要等待的goroutine数量,每个要等待的goroutine在开始时调用Add增加计数器,完成任务后调用Done方法减少计数器,主goroutine调用Wait方法阻塞,直到计数器归零,即所有相关goroutine都完成任务。

主要方法及其作用

  1. Add(delta int)
    • 作用:增加WaitGroup计数器的值。delta为增加的数量,可以是正数或负数,但通常使用正数。一般在启动新的goroutine之前调用,用来表示需要等待的goroutine数量。例如,若要启动3个goroutine,可以调用wg.Add(3)
  2. Done()
    • 作用:将WaitGroup计数器的值减1。通常在一个goroutine完成其任务时调用,等同于wg.Add(-1) 。它告诉WaitGroup这个goroutine已经完成工作。
  3. Wait()
    • 作用:阻塞当前goroutine,直到WaitGroup的计数器归零。一般在主goroutine或需要等待其他goroutine完成的goroutine中调用,使得调用者等待所有相关goroutine执行完毕后再继续执行后续代码。