首页 > 其他分享 >golang  实现 sync.WaitGroup wait() 方法 超时 自动释放

golang  实现 sync.WaitGroup wait() 方法 超时 自动释放

时间:2023-03-19 15:14:44浏览次数:36  
标签:wg WaitGroup chan sync golang 超时 wait

思路是把 wg.wait() 放到一个协程里,通过chan向外发送完成信号。 外层通过一个select超时结构来控制最大超时时间。

func waitTimeout(wg *sync.WaitGroup, timeout time.Duration) bool {
    c := make(chan struct{})
    go func() {
        defer close(c)
        wg.Wait()
    }()
    select {
    case <-c:
        return false // completed normally
    case <-time.After(timeout):
        return true // timed out
    }
}

 

标签:wg,WaitGroup,chan,sync,golang,超时,wait
From: https://www.cnblogs.com/ed557/p/17233082.html

相关文章

  • synchronized 和 Lock 的区别
    Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock......
  • 使用synchronized对并发性的影响
    1前言非静态方法的同步锁是当前对象(this)(对象锁)静态方法的同步锁是当前类的字节码(类锁)不同的锁之间能并发2同一对象内本节主类与资源类如下:classResorce{//资源......
  • Linux 远程数据同步工具详解(rsync)
    一、简介1认识Rsync(remotesynchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文......
  • Java synchronized的实现原理
    通常在多线程执行的过程中,我们需要考虑一些线程安全的问题,而线程安全问题中最常用的解决策略之一就是“锁”。加锁的本质,就是为了解决在多线程场景中对于共享数据访问的......
  • golang常用库包:缓存redis操作库go-redis使用(03)-高级数据结构和其它特性
    Redis高级数据结构操作和其它特性第一篇:go-redis使用,介绍Redis基本数据结构和其他特性,以及go-redis连接到Redishttps://www.cnblogs.com/jiujuan/p/17207166.html第......
  • golang中关于死锁的思考与学习
    1、Golang中死锁的触发条件1.1书上关于死锁的四个必要条件的讲解发生死锁时,线程永远不能完成,系统资源被阻碍使用,以致于阻止了其他作业开始执行。在讨论处理死锁问题的各......
  • Go sync.Pool
    1sync.Pool的使用场景一句话总结:保存和复用临时对象,减少内存分配,降低GC压力。 举个简单的例子:typeStudentstruct{ Namestring Ageint32 Remark[10......
  • 对并发熟悉吗?说说synchronized及实现原理
    synchronized的基本使用synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。作用主要有三个:确保线程互斥的访问同步代码保证共享变量的修改能......
  • synchronized 与 volatile 关键字
    目录​​1.前言​​​​1.synchronized关键字​​​​1.互斥​​​​2.保证内存可见性​​​​3.可重入​​​​2.volatile关键字​​​​1.保证内存可见性​​​​2.无......
  • golang使用缓存库go-cache的测试用例-短期内存缓存数据类似memcache/redis-【唯一客服
    golang中使用go-cache是非常普遍的,比如,我在对接微信客服接口的时候,获取access_token,默认获取一次有两个小时的有效期这个时候,我就可以使用go-cache来缓存access_token了......