开发者

sync.WaitGroup的用法及说明

开发者 https://www.devze.com 2025-07-28 10:50 出处:网络 作者: 你是我的幸运儿
目录sync.WaitGroup的用法WaitGroup总共有三个方法如图:WatiGroup的定义google官方示例总结sync.WaitGroup的用法
目录
  • sync.WaitGroup的用法
    • WaitGroup总共有三个方法
    • 如图:WatiGroup的定义
    • google官方示例
  • 总结

    sync.WaitGroup的用法

    WaitGroup在go语言中www.devze.com,用于线程同步,单从字面意思理解,wait等待的意思,group组、团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执行。

    WaitGroup能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完python成。

    WaitGroup总共有三个方法

    Add(delta int),Done(),Wait()

    简单的说一下这三个方法的作用。

    • Add:添加或者减少等待goroutine的数量;
    • Done:相当于Add(-1);
    • Wait:执行阻塞,直到所有的WaitGroup数量变成 0;

    如图:WatiGroup的定义

    sync.WaitGroup的用法及说明

    google官方示例

    package main
    
    import (
        "fmt"
        "sync"
        "net/http"
    )
    
    func main() {
        var wg sync.WaitGroup
        var urls = []string{
                "http://www.golang.org/",
                "http://www.google.com/",
                "http://www.baiyuxjsiong.com/",
        }
        for _, url := range urlsjavascript {
                // Increment the WaitGroup counter.
                wg.Add(1)
                // Launch a goroutine to fetch the URL.
                go func(url string) {
                        // Decrement the counter when the goroutine completes.
                        defer wg.Done()
                        // Fetch the URL.
                        http.Get(url)
                fmt.Println(url);
                }(url)
        }
        // Wait for all HTTP fetches to complete.
        wg.Wait()javascript
        fmt.Println("over");
    }
    

    代码执行结果为:

    http://www.baiyuxiong.com/
    http://www.google.com/
    http://www.golang.org/
    over
    

    从执行结果可看出:

    1、取三个网址信息的时候,结果显示顺序与for循环的顺序没有必然关系。

    2、三个goroutine全部执行完成后,wg.Wait()才停止等待,继续执行并打印出over字符。

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号