当前位置: 首页 > news >正文

go 使用 - sync.WaitGroup

使用 - sync.WaitGroup

    • 简介
    • 使用注意点

简介

waitgroup 是等待一组并发操作完成得方法。

Goroutines对Go来说是独一无二的(尽管其他一些语言有类似的并发原语)。它们不是操作系统线程,它们不完全是绿色的线程(由语言运行时管理的线程),它们是更高级别的抽象,被称为协程(coroutines)。协程是非抢占的并发子程序,也就是说,它们不能被中断。 《Concurrency in Go 》

使用注意点

  • Add() 数 与 Done() 数 需要一致, 成对调用
  • Wait 方法用于等待所有协程执行完毕, 必须保证wait 在 add 之后, 不能让wait 和 add 有发生数据竞态的可能。 原因可看源码解读。
// 正确使用
wg.Add(1) 
go func(){defer wg.Done()...
}
wg.Wait()// 产生数据竞态条件, 错误使用
go func(){wg.Add(1) defer wg.Done()...
}
// wait 可能都没有阻塞, 因为add没有执行
wg.Wait()
  • 希望将wg 传入函数内部使用, 需要传地址
wg.Add(workers)
for i:= 0;i < workers; i++{go deal(&wg, i)
}
wg.Wait()func deal(index int, wg *sync.WaitGroup){defer wg.Done()...
}

sync.WaitGroup 源码解读

http://www.lryc.cn/news/268770.html

相关文章:

  • Java Web Day07-08_Layui
  • 阿里云华北3(张家口)暂时无法办理经营性ICP许可证
  • 八种常见顺序存储的算法
  • Leetcod面试经典150题刷题记录 —— 栈篇
  • 【Qt-QThread-QQueue】
  • 电子握力器改造
  • 3D展2D数学原理
  • MacOS+Homebrew+iTerm2+oh my zsh+powerlevel10k美化教程
  • jenkins解决工具找不到的问题
  • Android : 画布的使用 简单应用
  • 紫光展锐5G扬帆出海 | 东南亚成为5G新热土
  • STM32 学习(一)新建工程
  • ROBOGUIDE教程:FANUC机器人固定点焊焊接虚拟仿真
  • 代码审计必要性探讨
  • SpringBoot-Shiro
  • 认识Docker
  • uniapp的分包使用记录
  • JSON.stringify()
  • 机器学习——损失函数
  • C#多线程(补充)
  • 关于苹果iOS 16:揭开伪装成飞机模式的隐形蜂窝接入漏洞的动态情报
  • Python+OpenCV 零基础学习笔记(4-5):计算机图形基础+Python相对文件路径+OpenCV图像+OpenCV视频
  • 【C++篇】讲解Vector容器的操作方法
  • 桥接模式-举例
  • FreeBSD下安装Jenkins(软件测试集成工具)记录
  • 数据结构学习 Leetcode474 一和零
  • VS配置PCO相机SDK环境
  • 六、Redis 分布式系统
  • Unity相机跟随角色移动
  • Lua的垃圾回收机制详解