首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go语言WaitGroup

一、WaitGroup简介 Golang中sync包提供了基本同步基元,如互斥锁等.除了Once和WaitGroup类型, 大部分都只适用于低水平程序线程,高水平同步线程使用channel通信更好一些...WaitGroup直译为等待组,其实就是计数器,只要计数器中有内容将一直阻塞 在Golang中WaitGroup存在于sync包中,在sync包中类型都是不应该被拷贝的.源码定义如下 // A WaitGroup...At the same time, // Wait can be used to block until all goroutines have finished. // // A WaitGroup...可以是负数 Done()表示减少WaitGroup计数器的值,应当在程序最后执行.相当于Add(-1) Wait()表示阻塞直到WaitGroup计数器为0 type WaitGroup func...(wg *WaitGroup) Add(delta int) func (wg *WaitGroup) Done() func (wg *WaitGroup) Wait() 二、代码示例 使用

32020
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Go :WaitGroup简介与实践

    简介 在Go语言中,sync.WaitGroup结构体对象用于等待一组线程的结束;WaitGroup是go并发中最常用的工具,我们可以通过WaitGroup来表达这一组协程的任务是否完成,以决定是否继续往下走...,或者取任务结果; WaitGroup的结构体: type WaitGroup struct { noCopy noCopy state1 [3]uint32 } 在sync.WaitGroup...结构体对象中有三个方法,Add()、Done()、Wait() Add()方法主要为WaitGroup的等待数+1或者+n; func(*WaitGroup) Add() Add()方法内部计数器加上delta...通过waitgroup的写法 对于这种情况,go语言中有一个其他的工具sync.WaitGroup 能更加方便的帮助我们达到这个目的。...WaitGroup对象不是一个引用类型 WaitGroup对象不是一个引用类型,在通过函数传值的时候需要使用地址: func main() { wg := sync.WaitGroup{}

    26110

    用好工作池 WaitGroup

    本节学习 WaitGroup的用法 如何实现工作池 WaitGroup的用法 WaitGroup 用于实现工作池,因此要理解工作池,我们首先需要学习 WaitGroup。...WaitGroup 用于等待一批 Go 协程执行结束。程序控制会一直阻塞,直到这些协程全部执行完毕。假设我们有 3 个并发执行的 Go 协程(由 Go 主协程生成)。...这就可以用 WaitGroup 来实现 package main import ( "fmt" "time" "sync" ) func login(wg *sync.WaitGroup...){ time.Sleep(time.Second) fmt.Println("登录完成") wg.Done() } func getUserInfo(wg *sync.WaitGroup...image.png 下面是waitGroup 的使用说明 1.WaitGroup 是一个等待协程完成的结构体 2.主协程通过调用Add 方法设置等待协程的数量 3.每个子协程完成的时候,需要调用Done

    66030

    Go 并发实战 -- sync WaitGroup

    前言 waitgroup也是一个非常有用的并发工具,有点像是Java中的CyclicBarrier,只不过Go中的WaitGroup等待的是协程而已。...通常来说,WaitGroup是go并发中最常用的工具了,在起协程并发做一些事儿,我们可以通过WaitGroup了表达这一组协程的任务是否完成,已决定是否继续往下走,或者取任务结果,下面来看一下WaitGroup...语法基础 WaitGroup的核心关注点是:Add()、Done()、Wait()三个函数 Add函数主要为WaitGroup的等待数+1或者+n Done函数调用的也是Add函数,主要用于-1操作...(waitGroup) waitGroup.Wait() // 这里会阻塞main,直到所有的任务都完成 fmt.Println("end") } func DoSomething(waitGroup...*sync.WaitGroup) { for i:=0;i <10;i++ { waitGroup.Add(1) go func(waitGroup *sync.WaitGroup

    1.2K20
    领券