首页 > 其他分享 >CAS - Compare and Swap

CAS - Compare and Swap

时间:2022-11-22 19:34:01浏览次数:55  
标签:Compare CAS 新值 乐观 修改 线程 Swap 内存

1 什么是CAS

CAS是compare and swap的缩写,中文可以翻译成:比较并交换。CAS操作来源于底层硬件领域。因为CAS能够极大地提高并发效率,因此在硬件设计领域,CAS这种操作就是存在的

synchronized这种独占锁属于悲观锁,乐观锁最常见的就是CAS

CAS的思想本质上就是乐观锁思想。即:假设情况都是乐观的,那么当前内存位置V的值是预期原值A,如果这样,请把内存位置V的值设置为新值B;否则,乐观的情况不成立,什么也别做。

乐观锁的思想减少了使用同步块等悲观锁的开销,但是本质是基于乐观锁思想的,因此肯定存在一些问题,即在高并发的情况下,有时需要进行多轮CAS操作才能完成值的更新。

 

2 CAS原理

CAS 有三个操作数:当前值A、内存值V、要修改的新值B

 

 

3 CAS缺点

会带来ABA的问题例如:

1. 线程A读到当前值是10,可能线程B把值修改为100,然后线程C又把值修改为10

2.等到线程A拿到执行权时,因为当前值和内存值是一致的,线程A是可以修改的

3.这是不合理的,因为我们从上帝的角度来看,这个变量已经被线程B和线程C修改过了

 

 解决办法:Java也提供了AtomicStampedReference类供我们用,说白了就是加了个版本,比对的就是内存值+版本是否一致。

 

 

标签:Compare,CAS,新值,乐观,修改,线程,Swap,内存
From: https://www.cnblogs.com/ningshare/p/16916203.html

相关文章

  • Apache Cassandra 的 Spring Data(数据)
    版本4.0.0SpringDataforApacheCassandra项目将核心Spring概念应用于使用CassandraColumnar数据存储开发解决方案。“模板”作为存储和查询文档的高级抽象提供。......
  • Apache Cassandra 的 Spring Data(数据)(二)
    8.简介参考文档的这一部分解释了SpringDataforApacheCassandra提供的核心功能。CassandraSupport引入了Cassandra模块功能集。反应式Cassandra支持解释了反应式......
  • Apache Cassandra 的 Spring Data(数据)(三)
    13.反应式Cassandra存储库本章概述了ApacheCassandra的反应式存储库支持所处理的特性。它建立在Cassandra 存储库中解释的核心存储库基础架构之上,因此您应该对其中......
  • Apache Cassandra 的 Spring Data(数据)附录(四)
    附录A:命名空间引用元素​​<repositories/>​​该元素触发了Spring数据存储库基础结构的设置。最重要的属性是,它定义了要扫描Spring数据存储库接口的包。请参阅“​​......
  • Picasso加载图片
    picasso是Square公司开源的一个Android图形缓存库,地址​​http://square.github.io/picasso/​​,可以实现图片下载和缓存功能。仅仅只需要一行代码就能完全实现图片的异步加......
  • .compareTo用法
    一.java中的compareto方法1.返回参与比较的前后两个字符串的asc码的差值,如果两个字符串首字母不同,则该方法返回首字母的asc码的差值String a1 = “a”;String a2 =......
  • 原子操作CAS与锁实现
    (36条消息)原子操作CAS与锁实现_goingwiththewind的博客-CSDN博客 锁和原子操作(36条消息)原子操作CAS与锁实现_摸鱼呀的博客-CSDN博客  CPU亲缘性1#inc......
  • antd Cascader实现多选功能
    antd中的组件cascader用于联级选择,但是只支持单选,在项目过程中经常会遇到多选的情况。这边将多选情况进行总结,以及附上实现代码。antd实现的单选功能如下:https://3x.ant.......
  • Cassandra学习
     最近在nosql数据库选型上进行调研,初步了解了一下Facebook的Cassandra.记录下来。 Cassandra是一款混合的非关系型数据库主要特点:就是它不是一个数据库,而是由一堆数据库......
  • CAS
    CAS机制CAS(CompareandSwap)是乐观锁思想的一种典型实现乐观锁与悲观锁悲观锁:悲观锁更新的方式认为:在更新数据的时候大概率会有其他线程去争夺共享资源,所以悲观锁的......