CAS和自旋到底是一个概念吗?
问题:
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和自旋到底是一个概念吗?相关推荐
- 我知道乐观锁,但是我的确不知道CAS啊,到底什么是CAS
目录 写在前面 一.初识CAS(比较并交换) 二.CAS原理(自旋锁.unsafe类) 三.CAS是什么 四.CAS缺点 五.ABA问题 写在前面 相信很多小伙伴对乐观锁.悲观锁都不陌生,但是说到ja ...
- 为什么一个概念会非常难懂呢?人是如何理解的呢?
为什么一个概念会非常难懂呢?人是如何理解的呢? 1.赵毅衡老先生在<文化符号学>关于理解作了一段非常精辟的解释: 部份(或组分.或因素)脱离了系统,就不再具有意义,用信息论的术语来说就是: ...
- 相机的 高清到底是一个什么东西
高清到底是一个什么东西?可能很多人还只能依稀的知道1080P什么的.当你在广告中看到数字电视机时,总会说支持1080i/1080P这样标准,先不提现在市面上销售的电视机有几个能达到这样一个要求.我们来 ...
- java程序员被误导的一个概念,Set也可以有序
转载自 java程序员被误导的一个概念,90%人不知道 我们经常听说List是有序且重复的,Set是无序不重复的.这里有个误区,这里说的顺序有两个概念,一是按添加的顺序排列,二是按自然顺序a-z排列. ...
- 网络服务器带宽Mbps、Mb/s、MB/s有什么区别?10M、100M到底是什么概念?
网络服务器带宽Mbps.Mb/s.MB/s有什么区别?我们经常听到IDC提供的服务器接入带宽是10M独享,或者100M独享,100M共享之类的数据.这的10M.100M到底是什么概念呢? 工具/原料 ...
- python与工程造价的联系_工程造价和工程预算是一个概念吗?
工程造价和工程预算是一个概念吗? 建筑行业的人员,想必都应该听说过 一.工程造价都包括哪些? 工程造价包括了概算.预算.结算.决算.预算只是工程造价的一个分部. 概算是编制预算以前,对设计图纸上体现 ...
- 云计算不还是服务器吗,云计算和服务器可以说是一个概念吗?
不是一个概念,差别大了,用百科中的定义来说. 云计算:(cloud computing),是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备.云其实是网络. ...
- 商业智能BI在信息化建设中到底处于一个什么位置?
随着互联网.物联网.云计算.人工智能.大数据等新一代信息技术的普及,众多企业开始进行转型,把信息化建设放在企业发展的首要位置.在信息化建设中,很多企业不清楚商业智能BI,这个商业世界中的新宠儿,在信息 ...
- 计算机硕博连读最快几年,“硕博连读”到底是不是一个坑?
原标题:"硕博连读"到底是不是一个坑? 近年来"硕博连读"四个字的热度是越来越高,很显然硕士学历的身价再一次开始下降,大家都纷纷开始考虑要不要读博了,很多研究生 ...
最新文章
- usaco Job Processing(mark)
- 正确设置php-fpm和nginx防止网站被黑
- python工具包_python 工具包
- 2006年2月8日 再见,Borland
- 获CNNVD感谢信!知道创宇以专业漏洞研究能力支撑“漏洞通报”业务
- 开发步骤_社交app开发步骤,送给不懂app开发的你
- 国家气象站逐日数据据v3.0 提取转成SWAT所需要格式
- 辛普森悖论_辛普森悖论如何影响AB测试
- //{{AFX_MSG、//{{AFX_VIRTUAL、//{{AFX_MSG_MAP、//{{AFX_DATA_INIT用途
- 你值得安装的24个chrome插件!!!
- Win11电脑一边耳机没声音怎么办
- BlogsToWordPress v16.9 – 将(新版)百度空间,网易163,新浪sina,QQ空间,人人网,CSDN,搜狐Sohu,博客大巴Blogbus,天涯博客,点点轻博客等博客搬家到Wor
- 手机屏幕xy坐标软件_软件工程中的xy问题
- 简单的一个在线聊天室
- MySQL消除笛卡尔积的方法,mysql-了解SQL中的笛卡尔积
- matlab生成组合,组合生成算法及matlab程序
- 集团型企业主数据管理框架、方法
- 使用 auto-drawing 画一个户型图
- Oracle APEX 系列文章2:在阿里云上打造属于你自己的APEX完整开发环境 (准备工作)... 1
- 动态规划(以合唱团为例)
热门文章
- maven使用c3p0——详细(很详细)
- MQTT-SN协议阅读之MQTT-SN vs MQTT
- 独家 | A/B测试的定义、操作方法、案例与实用工具分享
- [跟练]基于七普修正Worldpop人口栅格数据(附2020年worldpop100m人口栅格)
- python中标点符号大全及名字_标点符号大全及名字
- 36氪专访融云CEO董晗:8年企服,6年出海,现计划成为「沙特最大科技企业」
- 人工智能未来十大趋势,22年最新
- 劣质VGA线导致不支持非标准分辨率显示
- IDEA 添加类注释、方法注释(快捷键 /** + Enter)
- python kivy 控件(小部件)的属性集合