博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Golang学习日志 ━━ atomic明明是原子操作,并发结果却出错
阅读量:4116 次
发布时间:2019-05-25

本文共 555 字,大约阅读时间需要 1 分钟。

原子操作是硬件的底层支持,而锁是操作系统提供的API实现。

今天写原子操作时自以为锁得非常牢固,结果还是高估了自己~~话不多说,看代码

var atomicSW sync.WaitGroupvar atomicX int64 = 0for i := 0; i < 1000; i++ {
atomicSW.Add(1) go func() {
//如果使用这个方式来实现atomicX++结果或atomicX=atomicX+1结果,不仅多此一举,其结果更是错的 atomicX = atomic.AddInt64(&atomicX, 1) //应当使用如下方式 //atomic.AddInt64(&atomicX, 1) atomicSW.Done() }()}atomicSW.Wait()fmt.Println("结果为:", atomicX)//结果为995等各种可能性

错误原因

原子操作后的返回值再赋值给atomicX,这个=号赋值的操作并没有加锁,效果等同于没有使用原子操作。

当遇到多个goroutine并发时~~~一看就是小白的操作啊

============================================

并发时要时刻提醒自己不要被串行思路干扰

转载地址:http://lvkpi.baihongyu.com/

你可能感兴趣的文章
JavaScript数组的几个经典API
查看>>
2种检查JavaScript数组是否为空的方法
查看>>
用CSS计数器美化数字有序列表
查看>>
总结:前端开发从入门到高薪中文指南.pdf
查看>>
【前端面试题】06—16道设计模式面试题(附答案)
查看>>
400 道前端常考必考面试题(附答案详解)
查看>>
Vue中实现输入框Input输入格式限制
查看>>
我的一些关于职场和职业发展的心得
查看>>
9种HTML中通过CSS方式隐藏元素的方法汇总
查看>>
JavaScript队列和双端队列
查看>>
一些常用的语音特征提取算法
查看>>
【前端面试题】07—47道基础的VueJS面试题(附答案)
查看>>
4种JavaScript中获取HTML元素的方式
查看>>
6种iframe高度自适应的方法
查看>>
【前端面试题】08—31道有关前端工程化的面试题(附答案)
查看>>
iframe在iphone手机上的问题与解决方案
查看>>
用HTML5 Canvas组件实现图像灰度化
查看>>
【前端面试题】09—44道常见Augluar基础面试题下(附答案)
查看>>
JavaScript一些常用 API整理汇总
查看>>
【前端面试题】10—21道关于性能优化的面试题(附答案)
查看>>