登录
首页 >  Golang >  Go问答

如何在不使用 time.Sleep 的情况下等待所有 goroutines 完成?

来源:Golang技术栈

时间:2023-03-05 19:28:41 454浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《如何在不使用 time.Sleep 的情况下等待所有 goroutines 完成?》,主要介绍了golang、sleep,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

如何在不使用 time.Sleep 的情况下等待所有 goroutines 完成?

正确答案

假设有一个需要等待多个 goroutine 完成后才能继续执行的程序,可以使用 sync 包中的 WaitGroup 来实现等待。

具体来说,首先在主 goroutine 中创建一个 WaitGroup 对象,然后将其计数器设置为等待的 goroutine 数量。接下来,每个 goroutine 在完成任务后都需要调用 WaitGroup 的 Done 方法,以通知主 goroutine 任务已经完成。最后,主 goroutine 调用 WaitGroup 的 Wait 方法等待所有任务完成即可。

假设有一个需要等待多个 goroutine 完成后才能继续执行的程序,可以使用 sync 包中的 WaitGroup 来实现等待。

具体来说,首先在主 goroutine 中创建一个 WaitGroup 对象,然后将其计数器设置为等待的 goroutine 数量。接下来,每个 goroutine 在完成任务后都需要调用 WaitGroup 的 Done 方法,以通知主 goroutine 任务已经完成。最后,主 goroutine 调用 WaitGroup 的 Wait 方法等待所有任务完成即可。

下面是一个示例代码,其中创建了 5 个 goroutine 并等待它们完成:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done()

    fmt.Printf("Worker %d starting\n", id)

    // 模拟一些工作
    for i := 0; i 

在该示例中,首先创建了一个 WaitGroup 对象 wg,并设置其计数器为 5。然后创建了 5 个 goroutine 并启动它们,每个 goroutine 都需要在完成任务后调用 wg.Done() 来通知主 goroutine。最后,主 goroutine 调用 wg.Wait() 来等待所有 goroutine 完成。当所有 goroutine 都完成后,主 goroutine 才会继续执行,输出 "All workers done"。

本篇关于《如何在不使用 time.Sleep 的情况下等待所有 goroutines 完成?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>