CAS策略

news2024/11/25 2:36:54

CAS

CAS(Compare And Swap)比较并交换

CAS是多线程环境下对共享变量进行修改时的一种策略,主要存在三个参数:当前值、预估值、结果

CAS采用的策略是当一个线程要对共享变量进行修改时,需要获取内存中共享变量的值作为预期值,并将预期值和结果交给CPU,CPU会将预期值和内存中共享变量的当前值进行判断,如果两者相等,就说明这个过程中没有其他线程修改了共享变量,然后就可以对共享变量进行修改;如果两者不相等,那么CAS就会再次获取共享变量的当前值作为预期值,再次交给CPU进行判断,就这样一直循环,知道循环达到一定的次数或者两者比较相等而结束。

在这里插入图片描述

CAS操作是一种乐观锁的实现方式,也就是不加锁,可以使得线程响应速度变快,但同时如果存在很多CAS操作一直循环的情况,就会占用很多资源。

ABA问题

指的是一个线程获取到的期望值即使和共享变量的值相等,但是此时的期望值却不是最新的值。

存在两个线程A和B都获取共享变量的值作为期望值,此时线程B先进行CAS操作,将共享变量从A改为B,线程B再一次进行CAS操作,将共享变量从B改为A,此时线程A使用期望值和共享变量进行判断,虽然是相等的,但是线程A此时的期望值已经不是共享变量的最新值,线程A并不知道,其在获取期望值到进行比较的过程中共享变量发生了几次变化,虽然操作的结果是正确的,但是并不知道迭代了几个版本,于是就出现了ABA问题。

ABA问题解决

通过版本号判断是否发生了修改,每次CAS操作成功时都会增加版本号,在进行比较阶段除了比较期望值,还要比较版本号,通过比较版本号能发现版本有没有出现更新的情况,从而解决ABA问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/980684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动驾驶中间件

自动驾驶中间件 1. 什么是中间件2. 中间件的分类3. 自动驾驶为什么需要中间件4. 通信中间件 Reference: 自动驾驶中间件:量产落地的关键技术通俗易懂的告诉你什么是中间件 对于初入自动驾驶行业的人来说,各色各样的新型传感器、线控系统、芯…

基于Java+SpringBoot+Vue前后端分离家政服务管理系统的设计与实现【Java毕业设计·文档报告·代码讲解·安装调试】

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

【考研数学】高等数学第五模块 —— 级数(2,幂级数)

文章目录 引言二、幂级数2.1 基本概念2.2 幂级数的收敛半径与收敛域2.3 幂级数的性质2.4 将函数展开为幂级数2.4.1 直接法2.4.2 间接法 2.5 求幂级数的和函数 写在最后 引言 承接前文的常数项级数,我们来继续看看关于幂级数的内容。 二、幂级数 2.1 基本概念 函数…

SpringCloud(二)

1.Nacos配置管理 Nacos除了可以做注册中心,同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案&#…

php使用jwt作登录验证

1 在项目根目录下,安装jwt composer require firebase/php-jwt 2 在登录控制器中加入生成token的代码 use Firebase\JWT\JWT; use Firebase\JWT\Key; class Login extends Cross {/*** 显示资源列表** return \think\Response*/public function index(Request $r…

在贸易发展新时代,我为什么推荐你使用全渠道支持平台?

在当今世界,客户希望在与企业互动时获得无缝体验,无论他们使用什么渠道进行联系。这就是全渠道支持的用武之地。通过提供全渠道客户支持,企业可以满足客户期望并提高客户满意度。在本文中,我们将探讨它的好处以及认识全渠道客户沟…

前人栽树,后人才能乘凉!聊聊低代码对开发者的意义

一、低代码很火 LCDP(低代码开发平台)市场规模大,增长迅速。Gartner机构的预测,到2025年,企业70%的新应用将会通过低代码或者无代码技术开发,这将加快低代码市场的全面爆发。而另外一家研究机构海比研究院数…

YOLOv5:对yolov5n模型进一步剪枝压缩

YOLOv5:对yolov5n模型进一步剪枝压缩 前言前提条件相关介绍具体步骤修改yolov5n.yaml配置文件单通道数据(黑白图片)修改models/yolo.py文件修改train.py文件 剪枝后模型大小 参考 前言 由于本人水平有限,难免出现错漏,…

2023高教社杯数学建模国赛题目这样选择

2023高教社杯数学建模国赛题目如何选择 一年一度的数学建模国赛要来啦!!!小编仔细阅读了比赛官方网站上的规则和要求,以及比赛的题型和时间安排,现总结分享给大家。小编将会在开赛后第一时间发布选题建议、所有题目的…

Leetcode - 112双周赛

一,2839. 判断通过操作能否让字符串相等 I ​ 该题的题意就是看 单数下标 和 偶数下标的 s1 和 s2 中的字母及其数量是否相等。 代码如下(也可以使用哈希表来做): class Solution {public boolean canBeEqual(String s1, String s2) {int[] a new in…

Debian11安装Geoserver+矢量插件

呕心之作,小白教程 1 安装 Java 112 安装Geoserver2.1 安装2.2 设置自启动2.3 跨域问题 3 安装矢量插件 Geoserver的官网安装手册。 GeoServer需要 Java 8 或者 Java 11 环境 1 安装 Java 11 Debain默认安装 Java 11 版本,直接执行: # 确认…

​​​​​​​程序流程图怎么画?几步教你快速绘制流程图

程序流程图怎么画?在工作中,我们经常需要向同事或者客户展示我们的工作流程,让他们对我们的工作有更全面的了解和认识。此时,流程图就成为了一个非常有用的工具,通过它,我们可以将复杂的工作流程清晰地展示…

华为云云服务器评测|华为云耀云L搭建zerotier服务测试

0. 环境 - Win10 - 云耀云L服务器 1. 安装docker 检查yum源,本EulerOS的源在这里: cd /etc/yum.repos.d 更新源 yum makecache 安装 yum install -y docker-engine 运行测试 docker run hello-world 2. 运行docker镜像 默认配…

Spring6.1之RestClient分析

文章目录 1 RestClient1.1 介绍1.2 准备项目1.2.1 pom.xml1.2.2 创建全局 RestClient1.2.3 Get接收数据 retrieve1.2.4 结果转换 Bean1.2.5 Post发布数据1.2.6 Delete删除数据1.2.7 处理错误1.2.8 Exchange 方法 1 RestClient 1.1 介绍 Spring 框架一直提供了两种不同的客户端…

DataX(MySQL同步数据到Doris)

1.场景 这里演示介绍的使用 Doris 的 Datax 扩展 DorisWriter实现从Mysql数据定时抽取数据导入到Doris数仓表里 2.编译 DorisWriter 这个的扩展的编译可以不在 doris 的 docker 编译环境下进行,本文是在 windows 下的 WLS 下进行编译的 首先从github上拉取源码 …

升哲科技城市级“算力+数字底座”服务亮相2023服贸会

9月2日至6日,以“开放引领发展,合作共赢未来”为主题的2023年中国国际服务贸易交易会在北京隆重举办。作为城市级数据服务商,升哲科技(SENSORO)连续第四年参加服贸会,携城市级“算力数字底座”服务及在城市…

语音芯片WTN6的驱动

前言 (1)本系列是基于STM32的项目笔记,内容涵盖了STM32各种外设的使用,由浅入深。 (2)小编使用的单片机是STM32F105RCT6,项目笔记基于小编的实际项目,但是博客中的内容适用于各种单片…

java八股文面试[数据库]——MySQL中事务的特性

在关系型数据库管理系统中,一个逻辑工作单元要成为事务,必须满足这 4 个特性,即所谓的 ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持…

[移动通讯]【Carrier Aggregation-3】【5G】

前言: 参考: 5G Mobile Communications:《Carrier Aggregation in 5G》 目录: 1: carrier Allocation Schemes 2: 网络结构 3: LTE CA 4: 5G CA 一 Carrier Allocation Schemes CA 主要作用…

问脉基础调研

基本功能: 资产清点 清点镜像、镜像软件资产数据与详细信息清点容器、应用软件资产数据与详细信息清点集群、Pod、Service、Ingress、Secrets 等数十种资产数据与详细信息提供资产与资产、资产与事件关联查看提供仪表盘总览当前检测对象数据情况 镜像安全 镜像漏…