首页 > 其他分享 >CAS简介

CAS简介

时间:2024-09-02 20:14:11浏览次数:12  
标签:11 变量 CAS 简介 线程 内存 内存地址

CAS定义

CAS,是Compare and Swap的简称,实现并发算法是常用到的一种技术,在这个机制中有三个核心的参数。

  • 1.主内存中存放的共享变量的值:V(一般情况下这个V是内存的地址值,通过这个地址可以获得内存中的值)。
  • 2.工作内存中共享变量的副本值,也叫预期值:A。
  • 3.需要将共享变量更新到的最新值:B。



    所以CAS是一种乐观锁机制的自旋锁

CAS的例子

  1. 在内存地址V当中,存储着值为10的变量。
  2. 此时线程1想把变量的值增加1.对线程1来说,旧的预期值A=10,要修改的新值B=11.(预期值是指预期要处理的值,最新值指处理后的值)
  3. 在线程1要提交更新之前,另一个线程2抢先一步,把内存地址V中的变量值率先更新成了11。
  4. 线程1开始提交更新,首先进行A和地址V的实际值比较,发现A不等于V的实际值,提交失败。
  5. 线程1 重新获取内存地址V的当前值,并重新计算想要修改的值。此时对线程1来说,A=11,B=12。这个重新尝试的过程被称为自旋。

CAS的缺点

  • 1.循环时间长开销很大。
  • 2.CAS机制只能保证一个变量的原子性操作,而不能保证整个代码块的原子性。
  • 3.ABA问题。

ABA问题

解决方法

给V增加版本号,在compare阶段不仅要比较期望值A和地址V中的实际值,还要比较变量的版本号是否一致。

标签:11,变量,CAS,简介,线程,内存,内存地址
From: https://www.cnblogs.com/zlzw1/p/18393447

相关文章

  • Lucas定理入门
    前置结论如果\(p\)为素数,有以下结论:\(a^p\equiva\pmodp\)即费马小定理\[C_{p}^i\equiv\begin{cases}1&i=0或者i=p\\0&其他情况\end{cases}\pmodp\]证明可以展开\((a+b)^p\equiva^p+b^p\pmodp\)证明1:用结论1\[\begin{aligned}(a+b)^p......
  • cas服务端自动登录
    应用场景在信任的第三方系统登录成功后,无需用户账号密码登录,实现后台cas自动登录具体流程1、第三方系统登录成功后,回调cas指定的方法;2、cas根据携带的用户信息,生成票据;3、带着票据进行cas登录;代码实现CASServer采用CASServer3.5.2版本,使用cas-server-core-3.5.2.jar包pr......
  • Docker 教程简介
    教程名:Docker与微服务实战B站地址:尚硅谷Docker实战教程(docker教程天花板)-哔哩哔哩讲师:周阳‍前提了解SpringBoot,SpringCloud了解一些中间件:Redis,Nginx,MySQL了解Linux的基本使用知道Git‍课程大纲基础篇(零基小白)Docker简介Docker安装Docker常用命......
  • C++头文件<algorithm>中常用函数简介
     概述头文件algorithm(算法库)中主要提供了一些对容器操作的函数,如排序、搜索、复制、比较等,因此使用频率还是很高的,由于主要是操作容器,所以函数的语法也很类似:algorithm_name(container.begin(),container.end(),...);其中,container.begin()和container.end()分......
  • C# 一分钟浅谈:变量与数据类型简介
    引言在C#编程中,了解和使用变量与数据类型是非常基础且重要的一步。正确的数据类型选择不仅能够提高程序的性能,还能避免许多潜在的问题。本文将详细介绍C#中常见的数据类型和变量的使用方法,并探讨一些常见的问题及其解决方法。常见数据类型C#中的数据类型主要分为两大类:值......
  • CUDA教程之 10 掌握 CUDA 矩阵乘法:共享内存、Tile 内存合并和 Bank 冲突简介(教程含源
    介绍在使用CUDA进行GPU编程的世界中,优化性能是关键。实现此目标的最强大技术之一是使用共享内存。本博客将引导您完成使用共享内存执行矩阵乘法的CUDA程序,特别关注理解分块内存合并和存储体冲突。在本文结束时,您将牢固掌握共享内存如何显著加快您的计算速度以及如何......
  • CAS原理剖析
    CAS原理剖析compareandswap也就是比较和交换,他是一条CPU的并发原语。他在替换内存的某个位置的值时,首先查看内存中的值与预期值是否一致,如果一致,执行替换操作。这个操作是一个原子性操作。Java中基于Unsafe的类提供了对CAS的操作的方法,JVM会帮助我们将方法实现CAS汇编指令。......
  • 分水岭算法简介
    分水岭算法是一种经典的图像分割技术,广泛应用于图像处理领域。它的名称源自地理学中的“分水岭”概念,即在地形中,水从高处流向低处,最终汇聚成河流的过程。在图像分割中,分水岭算法将灰度图像视为地形,将像素值看作海拔高度。该算法模拟水从各个局部最小值(即山谷)向外扩展,最终在山峰......
  • ROS2 Moveit2 - moveit_resources_panda_moveit_config包简介
    moveit_resources_panda_moveit_config是一个在MoveIt框架中常用的资源包,包含了Panda机器人模型(FrankaEmikaPanda)的配置文件。这个包用于测试和演示MoveIt的功能。它通常包含以下内容:URDF/XACRO文件:描述Panda机器人的几何、动力学和运动学模型。SRDF文件:描述Pand......
  • WebGL入门(020):WebGLTransformFeedback 简介、使用方法、示例代码
    还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。No.内容链接1Openlayers【入门教程】-......