首页 > 其他分享 >CAS

CAS

时间:2022-11-20 22:14:26浏览次数:28  
标签:变量 CAS 主存 更新 线程 共享

CAS机制

CAS(Compare and Swap)是乐观锁思想的一种典型实现

乐观锁与悲观锁

  • 悲观锁:

    悲观锁更新的方式认为:在更新数据的时候大概率会有其他线程去争夺共享资源,所以悲观锁的做法是:第一个获取资源的线程会将资源锁定起来,其他没争夺到资源的线程只能进入阻塞队列,等第一个获取资源的线程释放锁之后,这些线程才能有机会重新争夺资源。

  • 乐观锁:

    乐观锁更新方式认为:在更新数据的时候其他线程争抢这个共享变量的概率非常小,所以更新数据的时候不会对共享数据加锁。但是在正式更新数据之前会检查数据是否被其他线程改变过,如果未被其他线程改变过就将共享变量更新成最新值,如果发现共享变量已经被其他线程更新过了,就重试,直到成功为止。CAS机制就是乐观锁的典型实现。

什么是CAS

CAS机制的三个核心参数:

  • V:主存内存放的共享变量的值
  • A:工作内存中共享变量的副本值,也叫预期值
  • B:需要将共享变量更新到的最新值

01

如上图中,主存中保存V值,线程中要使用V值要先从主存中读取V值到线程的工作内存A中,然后计算后变成B值,最后再把B值写回到内存V值中。多个线程共用V值都是如此操作。CAS的核心是在将B值写入到V之前要比较A值和V值是否相同,如果不相同证明此时V值已经被其他线程改变,重新将V值赋给A,并重新计算得到B,如果相同,则将B值赋给V。

值得注意的是CAS机制中的这步步骤是原子性的(从指令层面提供的原子操作),所以CAS机制可以解决多线程并发编程对共享变量读写的原子性问题。

标签:变量,CAS,主存,更新,线程,共享
From: https://www.cnblogs.com/JujunWang/p/16909746.html

相关文章

  • Pod控制器详解(ReplicaSet)
    Pod控制器详解Pod控制器介绍Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类:-自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就......
  • cassandra的连接池配置
    cassandra的连接池配置(转)首先client端驱动https://github.com/datastax/java-drivercassandra的datastax驱动使用的是异步nio实现的,发出去的请求,不会阻塞线程,当有响应的时......
  • MySql类型转换函数cast
    这两天处理一个现网的MySQL慢查询工单,学到了一个好用的MySQL函数:cast。事情是这样的:我们有两张表t_user和t_rule表,需要关联这两张表去查询,关联字段是t_user表的主键......
  • Zerocash安全性分析
    本文对Zerocash做了简单分析,主要内容参考Zerocash原文。完整文件下载......
  • LiquibaseException java.lang.ClassCastException: class java.time.LocalDateTime c
      https://forum.liquibase.org/t/liquibaseexception-java-lang-classcastexception-class-java-time-localdatetime-cannot-be-cast-to-class-java-lang-string/5059......
  • mybatis XML 使用 case when 代替多个if
    不建议使用<selectid="findActiveBlogLike"resultType="Blog">SELECT*FROMBLOGWHEREstate=‘ACTIVE’<iftest="title!=null">AND......
  • Cassandra基础配置
    Cassandra基础配置一,集群部署#conf/cassandra.yaml#集群名称配置,默认TestClustercluster_name:'TestCluster'#种子节点配置,若为单节点也可配置为127.0.0.1#下方......
  • el-cascader回显始终显示第一级的数据
    这个功能用了好多次,第一次遇到这么个问题,当有五级数据的,都能正常回显,多了一级后就没法正常回显了,  后来发现每一项的最后一层数据有重复数据,我当时也是抱着试试的心......
  • Open Cascade 中的 AIS_InteractiveContext、V3d_Viewer 与 V3d_View 之间的关系
    转载请注明原文链接:https://www.cnblogs.com/mechanicoder/p/16892989.html1.前言本想通过Context与Viewer的多对一关系尝试实现三维视图图层、图元分类管理的功能,......
  • 3-4、Pod控制器-ReplicaSet
    Pod控制器:ReplicationController(简称RC,已经淘汰)ReplicaSetDeploymentDaemonSetJobCronjobStatefulSet自主式POD:deletepod后不会被重新拉起的,不是由pod控制器控......