使用 sync.Mutex 与 sync.WaitGroup

线程不安全的用法:

{var wg sync.WaitGroupcount := 0for i := 0; i < 10; i++ {// wg add 1 goroutinewg.Add(1)// goroutinego func() {defer wg.Done()for i := 0; i < 10000; i++ {// unsafe incrementcount++}}()}wg.Wait()fmt.Println(count)
}

加锁,线程安全:

{var myLock sync.Mutexvar wg sync.WaitGroupcount := 0for i := 0; i < 10; i++ {// wg add 1 goroutinewg.Add(1)// goroutinego func() {defer wg.Done()for i := 0; i < 10000; i++ {// safe incrementmyLock.Lock()count++myLock.Unlock()}}()}wg.Wait()fmt.Println(count)
}

其中一个运行输出:
53546
100000

自定义一个safe Counter

package counterimport ("log""sync"
)type Counter struct {mu    *sync.MutexValue int
}func NewCounter(value int) *Counter {return &Counter{new(sync.Mutex), 0,}
}func (c *Counter) Increment() {c.mu.Lock()// defer funcdefer func() {c.mu.Unlock()log.Printf("mu sync.Mutex Unlocked!")}()// safe increment Valuec.Value++
}

使用 safe Counter

{var wg sync.WaitGroupcount := counter.NewCounter(0)for i := 0; i < 10; i++ {// wg add 1 goroutinewg.Add(1)// goroutinego func() {defer wg.Done()for i := 0; i < 10000; i++ {// safe incrementcount.Increment()}}()}wg.Wait()fmt.Println(count.Value)
}

正确输出:
100000


http://www.taodudu.cc/news/show-5607645.html

相关文章:

  • vue中sync的使用
  • 使用 docker-sync 调整 Docker for Mac 磁盘性能
  • vue中的sync
  • 保姆级教程:在Linux上安装配置Resilio Sync
  • web 网页调试工具 browser-sync 在 Windows 上安装
  • android的sync按钮在哪,android studio的Gradle一直在sync的办法
  • linux sync命令,Linux中sync命令起什么作用呢?
  • reposync命令详解--reposync同步aliyunyum库到本地
  • SQLite3 --- sync同步机制
  • vue中的.sync修饰符
  • vue3中 :visible.sync 和slot报错
  • 使用CLI操作S3的sync命令
  • 关于sync()函数的使用
  • unity3d html 富文本框,在Unity 2018中充分使用TextMesh Pro
  • 别盲目听从你的用户
  • 企业安全事件回顾:企业怎么才能做好源代码防泄露?
  • 独立游戏开发者探讨F2P模式的可行性
  • 使用word编辑论文,从正文开始添加页码的设置步骤
  • 论文ddl:记录设置绪论从页码一开始
  • 搜索引擎收录网站新闻源的三大要点!
  • 百度算法的好处
  • 排名:百度小程序商城源码-LaiKe,它的应用范围
  • C# 解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市
  • android 新闻列表json,Android中通过ListView的实现简单新闻列表
  • 百度百科词条编辑为什么通过不了,如何修改百度百科词条才能成功
  • 百度百科词条要怎么修改,百度百科人人都可以修改吗
  • 百度新闻源重大调整,百家号将成企业曝光下一个风口?
  • 【必看】百度取消新闻源,您需要知道几个问题
  • 重磅!百度取消新闻源机制 一个时代的结束
  • 百度工具问题如何申请百度 360 谷歌等新闻源

sync.Mutex 与 sync.WaitGroup 使用示例相关推荐

  1. Golang sync.Mutex 与 sync.RWMutex

    文章目录 1.sync.Mutex 2.sync.RWMutex 2.1 Lock()与Unlock() 2.2 RLock() 和 RUnlock() 2.3 错误使用异常 参考文献 Golang ...

  2. Go 学习笔记(66)— Go 并发同步原语(sync.Mutex、sync.RWMutex、sync.Once)

    1. 竞态条件 一旦数据被多个线程共享,那么就很可能会产生争用和冲突的情况.这种情况也被称为竞态条件(race condition),这往往会破坏共享数据的一致性. 举个例子,同时有多个线程连续向同一 ...

  3. 对于sync.Mutex使用注意事项

    1.sync.Mutex的初始化注意事项 type MemProvider struct { lock     *sync.Mutex              //用来锁 sessions map[ ...

  4. GoLang之使用sync.pool和sync.cond

    GoLang之使用sync.pool和sync.cond 目录 GoLang之使用sync.pool和sync.cond 1.sync.Pool结构体 1.1sync.Pool结构体 1.2Put方法 ...

  5. Go 学习笔记(23)— 并发(02)[竞争,锁资源,原子函数sync/atomic、互斥锁sync.Mutex]

    本文参考 <Go 语言实战> 1. 竞争状态简述 如果两个或者多个 goroutine 在没有互相同步的情况下,访问某个共享的资源,并试图同时读和写这个资源,就处于相互竞争的状态,这种情况 ...

  6. Go的sync.Mutex(七):互斥锁锁定一个资源 只有一个协程操作其他等待

    简介 多个协程会操作一个特定资源,就会出现意想不到的错误类比脏读幻读等,所以我们使用互斥锁, 一个协程使用特定资源的时候进行锁定,用完解锁, 再让其他协程使用,所以其他协程想使用此资源,必须自己给资源 ...

  7. golang sync.Mutex 互斥锁 使用实例

    实例: var mutex sync.Mutex //互斥锁 func printer(str string){mutex.Lock() //加锁defer mutex.Unlock() //解锁fo ...

  8. go sync.Mutex

    并发编程中,不免涉及到共享资源的操作,go也提供简易的互斥锁作为访问控制的手段sync.Mutex,通过简单的Lock()进行加锁,Unlock()进行释放. 接下来我们从源码入手,看看加锁和解锁到底 ...

  9. go vet 报错:xx_xx passes lock by value: sync.Map contains sync.Mutex; call of xx_xx copies lock value

    问题描述: test.go: package main import "fmt" import "sync"var syncMapTest sync.Mapfu ...

最新文章

  1. python嵩天课后思考题_Python语言程序设计基础(第二版)嵩天等课后习题答案
  2. 李开复:AI行业正在回归商业本质,技术公司要有服务心态落地为王
  3. HashMap,LinkedHashMap,TreeMap的有序性
  4. UML解惑:图说UML中的六大关系--转
  5. centos 关闭防火墙
  6. 怎样编写测试类测试分支_编写干净的测试–从配置开始
  7. tableau三轴合并_举个栗子!Tableau技巧(34):同一张图表如何呈现多个度量
  8. ubuntu下idea后台执行的方法
  9. 计算机或与非门原理,依据基本原理构建现代计算机:从与非门到俄罗斯方块(基于项目的课程)...
  10. E3 tree 1.6在Firefox下显示问题的修复
  11. 天眼探空经济发展_“天眼”探空惊艳全球
  12. 农业农村部:非洲猪瘟对猪肉市场价格影响有限
  13. jQuery源码阅读
  14. [Prescan]Prescan中Sensor学习
  15. 超级美女抽出滤镜抠图
  16. 人人网首页登录页面html码,仿人人网WordPress登陆注册界面
  17. 【机器学习】吴恩达:机器学习的六个核心算法
  18. 现代前端技术解析:前端三层结构与应用
  19. 目标检测综述(二:古典方法对比现代方式以及目标检测算法相关概述)
  20. 利用Matlab对Excel数据表参数进行频谱分析(FFT)的方法

热门文章

  1. DNF端游服务器搭建流程
  2. 机械革命蛟龙7怎么样?测评值得买吗?详细性能点评
  3. 解读丨交通物流如何融合发展?线上线下联动出击
  4. darknet_ros安装的以及在PX4无人机仿真平台的目标检测
  5. 方源答:从键盘上输入年份和月份,输出这一年的该月有多少天。
  6. 第一台计算机是怎么样的
  7. 【流程】影视和游戏的IT基础设施详解
  8. 正版推荐 - Fences 4 – 让你的桌面更加整洁与高效的桌面图标文件整理工具软件!
  9. Uncaught Error: Mismatched anonymous define() module
  10. 清除IE10下input的叉叉(X)和密码输入框的眼睛图标