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,这个商业世界中的新宠儿,在信息 ...
- 计算机硕博连读最快几年,“硕博连读”到底是不是一个坑?
原标题:"硕博连读"到底是不是一个坑? 近年来"硕博连读"四个字的热度是越来越高,很显然硕士学历的身价再一次开始下降,大家都纷纷开始考虑要不要读博了,很多研究生 ...
最新文章
- 深入理解Java内存模型(四)——volatile
- 支付宝现使用故障 官方:不影响用户资金和信息安全
- linux 读书笔记
- 【项目实战】mybatis +vue.js 前后端交互批量删除
- 基于深度学习的图像语义分割技术概述之背景与深度网络架构
- 大数据安全分析“架构”
- Linux系统编程33:进程信号之详解信号的捕捉过程,用户态和内核态及其切换,sigaction和signal
- Factors of Factorial(AtCoder-2286)
- ssm mysql增删改查_SSM配置并实现简单的数据库增删改查操作
- 模块化编程的分层设计经验
- (4)Matplotlib_零碎知识点
- 《Linux Shell脚本攻略》读书笔记第二章 命令之乐
- oracle恢复删除数据
- 又一家边缘计算公司融资啦!!!
- 三国志战略版:登庸令队伍_貂蝉与贾诩的武锋组合
- 苹果5完美越狱_checkra1n for Mac(越狱工具)
- U3D Animator 组件控制动画的播放暂停,动态添加帧事件
- Android HID设备的连接
- Java毕设设计-高校运动会管理系统
- java memorystream 包_C#使用MemoryStream类读写内存