MST

星途 面试题库

面试题:Go语言中WaitGroup如何在多个goroutine间同步任务

假设你有一个任务列表,每个任务需要开启一个goroutine去执行,最后需要等待所有任务都完成后再继续后续操作。请用Go语言结合WaitGroup实现这个功能,简述实现思路并给出代码示例。
40.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 定义一个任务列表,每个任务是一个函数。
  2. 创建一个 sync.WaitGroup 实例。
  3. 遍历任务列表,为每个任务开启一个 goroutine,在开启 goroutine 前调用 wg.Add(1) 增加等待组计数器。
  4. 在每个 goroutine 任务完成时,调用 wg.Done() 减少等待组计数器。
  5. goroutine 调用 wg.Wait() 等待所有任务完成后再继续后续操作。

代码示例

package main

import (
    "fmt"
    "sync"
)

// 定义任务函数
func task(i int, wg *sync.WaitGroup) {
    defer wg.Done()
    fmt.Printf("Task %d is running\n", i)
    // 模拟任务执行
    // time.Sleep(time.Second)
    fmt.Printf("Task %d is done\n", i)
}

func main() {
    var wg sync.WaitGroup
    tasks := []int{1, 2, 3, 4, 5}

    for _, taskNum := range tasks {
        wg.Add(1)
        go task(taskNum, &wg)
    }

    wg.Wait()
    fmt.Println("All tasks are completed, continue with subsequent operations.")
}