MST

星途 面试题库

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

请简要阐述Go语言中WaitGroup实现并发控制的基本原理,包括其主要方法(如Add、Done、Wait)的作用及工作机制。
16.0万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

WaitGroup实现并发控制基本原理

WaitGroup是Go语言中用于实现并发控制的同步工具。它内部维护一个计数器,通过对计数器的操作来协调多个goroutine的执行。

主要方法

  1. Add方法
    • 作用:用于设置或增加WaitGroup内部计数器的值。
    • 工作机制:在启动新的goroutine之前,调用Add(n)方法,其中n为正整数,表示要等待的goroutine数量。每次调用Add,计数器就会增加n。如果n为负数,会导致运行时错误。例如,wg.Add(3)表示有3个goroutine需要等待。
  2. Done方法
    • 作用:用于将WaitGroup内部计数器减1。
    • 工作机制:在每个需要等待的goroutine结束时,调用wg.Done()方法,此方法等同于wg.Add(-1)。通常在goroutine函数的末尾调用,告知WaitGroup该goroutine已完成任务。
  3. Wait方法
    • 作用:阻塞当前goroutine,直到WaitGroup内部计数器的值变为0。
    • 工作机制:当一个goroutine调用wg.Wait()时,如果计数器的值大于0,该goroutine会被阻塞,放入等待队列。当计数器值由于调用Done方法减为0时,所有因调用Wait方法而阻塞的goroutine会被唤醒继续执行。