问题:

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. usaco Job Processing(mark)
  2. 正确设置php-fpm和nginx防止网站被黑
  3. python工具包_python 工具包
  4. 2006年2月8日 再见,Borland
  5. 获CNNVD感谢信!知道创宇以专业漏洞研究能力支撑“漏洞通报”业务
  6. 开发步骤_社交app开发步骤,送给不懂app开发的你
  7. 国家气象站逐日数据据v3.0 提取转成SWAT所需要格式
  8. 辛普森悖论_辛普森悖论如何影响AB测试
  9. //{{AFX_MSG、//{{AFX_VIRTUAL、//{{AFX_MSG_MAP、//{{AFX_DATA_INIT用途
  10. 你值得安装的24个chrome插件!!!
  11. Win11电脑一边耳机没声音怎么办
  12. BlogsToWordPress v16.9 – 将(新版)百度空间,网易163,新浪sina,QQ空间,人人网,CSDN,搜狐Sohu,博客大巴Blogbus,天涯博客,点点轻博客等博客搬家到Wor
  13. 手机屏幕xy坐标软件_软件工程中的xy问题
  14. 简单的一个在线聊天室
  15. MySQL消除笛卡尔积的方法,mysql-了解SQL中的笛卡尔积
  16. matlab生成组合,组合生成算法及matlab程序
  17. 集团型企业主数据管理框架、方法
  18. 使用 auto-drawing 画一个户型图
  19. Oracle APEX 系列文章2:在阿里云上打造属于你自己的APEX完整开发环境 (准备工作)... 1
  20. 动态规划(以合唱团为例)

热门文章

  1. maven使用c3p0——详细(很详细)
  2. MQTT-SN协议阅读之MQTT-SN vs MQTT
  3. 独家 | A/B测试的定义、操作方法、案例与实用工具分享
  4. [跟练]基于七普修正Worldpop人口栅格数据(附2020年worldpop100m人口栅格)
  5. python中标点符号大全及名字_标点符号大全及名字
  6. 36氪专访融云CEO董晗:8年企服,6年出海,现计划成为「沙特最大科技企业」
  7. 人工智能未来十大趋势,22年最新
  8. 劣质VGA线导致不支持非标准分辨率显示
  9. IDEA 添加类注释、方法注释(快捷键 /** + Enter)
  10. python kivy 控件(小部件)的属性集合