问题:

CAS是 compare and swap ,就是一个比较工作内存和主内存的值是否相同,相同的话,就用新值来替换这么一个操作。

但是,为什么好多地方都说这是自旋呢?

我理解比较一次的话,成功就返回true了,失败,那么就返回false。如果没有for循环的话,这就是一次操作啊,它本身不会去重试吧?只有在for(;;)死循环里边,才可以重试啊,很多底层都是这样做的。

所以,仅仅是CAS的话,就是一次操作,为什么叫做自旋呢。自旋的概念到底就是说是CAS,还是说有for循环的才叫CAS。真的很误导人啊。

下面贴一下 CAS的源码注释:

这里边,没有任何词语说,它本身有自动重试这个机制吧?

回答1:

你的理解大体上是没问题的,稍微还有一点不完美。

自旋和cas不是一回事儿,只是再cas的时候可以利用自旋机制来不断重试

自旋是一种锁优化机制,所以锁优化中会有『自旋锁』的概念(线程空转重试获取锁),自旋不一定是用在cas场景,其他锁场景也是能用的(比如互斥锁)

cas是一种乐观锁机制,cas可以不用自旋机制,失败也可以直接返回false。只是一般应用场景下,cas都会带有重试机制(while和for实现空转,不断尝试)

回答2:

是两个概念,你的理解没错,只不过经常将cas和轮询结合使用,实现线程安全的,不使用锁的读写操作。
举个例子:

void lock() {bool exp = false;while (lock_.compare_exchange_weak(exp, true) == false) {exp = false;}
}

lock_是一个原子变量,compare_exchange_weak是c++的cas实现方式之一,这里就结合了cas和while轮询做线程安全的自旋锁。

CAS和自旋到底是一个概念吗?相关推荐

  1. 我知道乐观锁,但是我的确不知道CAS啊,到底什么是CAS

    目录 写在前面 一.初识CAS(比较并交换) 二.CAS原理(自旋锁.unsafe类) 三.CAS是什么 四.CAS缺点 五.ABA问题 写在前面 相信很多小伙伴对乐观锁.悲观锁都不陌生,但是说到ja ...

  2. 为什么一个概念会非常难懂呢?人是如何理解的呢?

    为什么一个概念会非常难懂呢?人是如何理解的呢? 1.赵毅衡老先生在<文化符号学>关于理解作了一段非常精辟的解释: 部份(或组分.或因素)脱离了系统,就不再具有意义,用信息论的术语来说就是: ...

  3. 相机的 高清到底是一个什么东西

    高清到底是一个什么东西?可能很多人还只能依稀的知道1080P什么的.当你在广告中看到数字电视机时,总会说支持1080i/1080P这样标准,先不提现在市面上销售的电视机有几个能达到这样一个要求.我们来 ...

  4. java程序员被误导的一个概念,Set也可以有序

    转载自 java程序员被误导的一个概念,90%人不知道 我们经常听说List是有序且重复的,Set是无序不重复的.这里有个误区,这里说的顺序有两个概念,一是按添加的顺序排列,二是按自然顺序a-z排列. ...

  5. 网络服务器带宽Mbps、Mb/s、MB/s有什么区别?10M、100M到底是什么概念?

    网络服务器带宽Mbps.Mb/s.MB/s有什么区别?我们经常听到IDC提供的服务器接入带宽是10M独享,或者100M独享,100M共享之类的数据.这的10M.100M到底是什么概念呢? 工具/原料 ...

  6. python与工程造价的联系_工程造价和工程预算是一个概念吗?

    工程造价和工程预算是一个概念吗? 建筑行业的人员,想必都应该听说过 一.工程造价都包括哪些? 工程造价包括了概算.预算.结算.决算.预算只是工程造价的一个分部.​ 概算是编制预算以前,对设计图纸上体现 ...

  7. 云计算不还是服务器吗,云计算和服务器可以说是一个概念吗?

    不是一个概念,差别大了,用百科中的定义来说. 云计算:(cloud computing),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备.云其实是网络. ...

  8. 商业智能BI在信息化建设中到底处于一个什么位置?

    随着互联网.物联网.云计算.人工智能.大数据等新一代信息技术的普及,众多企业开始进行转型,把信息化建设放在企业发展的首要位置.在信息化建设中,很多企业不清楚商业智能BI,这个商业世界中的新宠儿,在信息 ...

  9. 计算机硕博连读最快几年,“硕博连读”到底是不是一个坑?

    原标题:"硕博连读"到底是不是一个坑? 近年来"硕博连读"四个字的热度是越来越高,很显然硕士学历的身价再一次开始下降,大家都纷纷开始考虑要不要读博了,很多研究生 ...

最新文章

  1. 深入理解Java内存模型(四)——volatile
  2. 支付宝现使用故障 官方:不影响用户资金和信息安全
  3. linux 读书笔记
  4. 【项目实战】mybatis +vue.js 前后端交互批量删除
  5. 基于深度学习的图像语义分割技术概述之背景与深度网络架构
  6. 大数据安全分析“架构”
  7. Linux系统编程33:进程信号之详解信号的捕捉过程,用户态和内核态及其切换,sigaction和signal
  8. Factors of Factorial(AtCoder-2286)
  9. ssm mysql增删改查_SSM配置并实现简单的数据库增删改查操作
  10. 模块化编程的分层设计经验
  11. (4)Matplotlib_零碎知识点
  12. 《Linux Shell脚本攻略》读书笔记第二章 命令之乐
  13. oracle恢复删除数据
  14. 又一家边缘计算公司融资啦!!!
  15. 三国志战略版:登庸令队伍_貂蝉与贾诩的武锋组合
  16. 苹果5完美越狱_checkra1n for Mac(越狱工具)
  17. U3D Animator 组件控制动画的播放暂停,动态添加帧事件
  18. Android HID设备的连接
  19. Java毕设设计-高校运动会管理系统
  20. java memorystream 包_C#使用MemoryStream类读写内存

热门文章

  1. 如何使用网线连接树莓派和电脑
  2. Android App赞赏功能,微信公众号赞赏功能升级:作者可以直接收到赞赏
  3. Matplotlib画图之调整字体大小
  4. android仿QQ优雅的修改App字体大小
  5. 《SQL基础》06. 函数
  6. 51单片机学习随笔(1)
  7. UML统一建模语言第7章 状态机图和活动图课后习题
  8. 微信小程序留言板设计
  9. 一、【s3c2440移植linux-3.5】移植准备
  10. 博途SCL模板项目实例,SCL学习资料,SCL详细资料,SCL教程