CAS是什么?它的底层原理是什么?

news2024/12/23 0:09:33

目录

一、CAS概述

二、底层原理

 三、总结


一、CAS概述

        CAS(Compare and Swap)比较和交换:是一种并发算法,也是一种乐观锁,从JDK5开始,jdk提供了java.util.concurrent.*,此包下面的类在高并发场景下经常使用,包中的原子类基于CAS实现了区别于syncchrnoized同步锁;用于实现多线程环境下的原子操作。它通过比较内存中的值期望值是否相等来判断是否发生了其他线程的干扰,从而实现原子性的操作。

二、底层原理

一)读取内存值

        首先,CAS会先读取内存中的值,通常称为“当前值”或“旧值”。

二)比较值

        CAS会将读取的值预期值进行比较,通常是通过比较内存中的一个值与一个期望值(比如在执行操作之前已经记录的值)进行比较。

三)比较结果

        如果比较结果相等,则说明没有其他线程干扰,可以进行下一步操作;如果比较结果不相等,则说明其他线程已经修改了内存中的值,CAS操作失败,需要重新尝试

四)写入新值:

        如果比较结果相等,CAS会尝试将新值写入内存中。这一步利用底层的原子指令(如CPU的CMPXCHC指令)来完成。如果写入操作成功,表示CAS操作成功,结束;如果写入操作失败,表示其他线程又进行了修改,需要重新进行比较和尝试。

 三、总结

        总之,CAS是一种基于比较和交换并发算法,通过比较内存中的值与期望值来实现原子操作,失败的话有重试机制。写操作可能存在ABA问题和自旋次数过多的问题,ABA问题可以通过版本号标记位机制解决,自旋次数过多可以通过调整自旋次数来解决;它的底层原理是利用硬件的原子性操作指令来完成比较和交换操作,从而实现线程安全和无锁的特性

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

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

相关文章

CTF密码学总结

0x01 目录 常见编码: ASCII编码Base64/32/16编码shellcode编码Quoted-printable编码XXencode编码UUencode编码URL编码Unicode编码Escape/Unescape编码HTML实体编码敲击码(Tap code)莫尔斯电码(Morse Code)编码的故事 各种文本加密 换位加密: 栅栏密码(Rail-fence Cipher)曲路密…

第13届蓝桥杯Scratch选拔赛真题集锦

第13届蓝桥杯Scratch选拔赛真题集锦 编程题 第 1 题问答题 跳舞机游戏 题目说明 编程实现 跳舞机游戏。 具体要求: 1).点击绿旗,舞台左上角显示得分0代表玩家分数,在得分右侧倒计时10代表游戏时长(10s) 2).游戏开始倒数计时,在舞台上随…

目标检测的通用实例提取

论文:General Instance Distillation for Object Detection 论文地址:https://arxiv.org/pdf/2103.02340.pdfhttps://arxiv.org/pdf/2103.02340.pdf 摘要 In recent years, knowledge distillation has been proved to be an effective solution for m…

vulnhub靶场之bassamctf

1.信息收集 探测存活主机,输入:netdiscover -r 192.168.239.0/24 ,发现192.168.239.177存活。 对目标主机192.168.239.176进行端口扫描,发现存活22(SSH)、80端口。 在浏览器上输入:http://192.168.239.177&#xff…

网络协议 | 典型协议、B/S模式、C/S模式

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

LeetCode:29. 两数相除

29. 两数相除 1)题目2)思路3)代码1.初始代码2.第一次优化3.第二次优化 4)结果1.初始结果2.第一次优化结果3.第二次优化结果 1)题目 给你两个整数,被除数 dividend 和除数 divisor。将两数相除,…

es 三 安装 es 安装kibana

目录 安装7.3.0 版本 下载地址 一个比一个快 页面测试访问 安装kibana 下载 Config/kibana.yml 配置修改开启中文 页面访问 安装7.3.0 版本 下载地址 一个比一个快 Index of /elasticsearch/ 下载中心 - Elastic 中文社区 下载中心 - Elastic 中文社区 官网下载 开箱…

CANape使用记录(一):CANape新建工程及标定观测

目录 1、概述 2、新建工程 3、添加观测与标定量 1、概述 CANape具有以下主要组件:在线测量,离线分析,诊断,打印机功能,数据管理,闪存编程,校准,CDM Studio和设备数据库编辑器&…

从工地到办公室:一个土木工程师如何学成测试技能?

提桶跑路成功了,这工地我是再也不来了。 ​ 工作中流的汗真的都是报专业时脑袋里进的水。 当时高考完,对于要学什么专业感到很迷茫,因为姨夫是干工地的,零几年土木专业的大学生,在我们这五线城市一个月也能够拿一万多…

汇聚支付APP+技术方案介绍

一、时序图 商户使用汇聚支付的 APP方案,需要两个步骤: 步骤一: 请求汇聚支付的支付接口,https://www.joinpay.com/trade/uniPayApi.action 获取返回的关键参数 rc_Result。 步骤二: 商户 APP 按照微信的 SDK 规范使…

pdf怎么拆分成一页一页的?办公常备工具说明

PDF(Portable Document Format)是一种用于创建和共享文档的文件格式。它由Adobe Systems开发,并已成为电子文档的通用格式。PDF文件可以包含文本、图像、表格、超链接和其他多媒体内容,使其成为一种非常方便的文件格式。 然而&…

ChatGPT国内免费使用的网站

ChatGPT是什么意思? ChatGPT全称:Chat Generative Pre-trained Transformer 在英文中“chat”是聊天的意思,GPT是一种预训练语言模型的缩写。 所以ChatGPT是一款功能非常强大的AI(人工智能)聊天机器人,能…

linux小技巧-如何修改IP(四种方法)

目录 项目场景: 方法分析及步骤介绍 原因分析: 解决方案: 项目场景: 项目上经常遇到修改IP的情况,这里总结一些各个情况下修改IP的方法,尤其时有时候没有主机屏幕显示,借助于命令行的方式修…

MATMacOS安装

MAT MacOS安装 文章目录 MAT MacOS安装第一章 简述第01节 介绍第02节 获取 第二章 配置第01节 显示包内容第02节 MAT配置Java环境变量第03节 MAT兼容低版本Java 第三章 问题第01节 正常启动效果第02节 可能遇到的问题 第一章 简述 第01节 介绍 什么是 MAT 工具? …

【随时更新】知识点回顾

哈夫曼编码和解码 C 哈夫曼编码 【介绍编码过程】 哈夫曼树编码及其图形化的实现 【使用可视化方式展现最终编码效果】 Python中使用哈夫曼算法实现文件的压缩与解压缩 【Python实现】 哈夫曼树 C语言实现 【图解如何生成】 编码过程 1. 使用二进制流,统计当前文件…

如何利用Smartbi电子表格进行财务常用账簿数据的联动查询

财务,是几乎所有企事业单位内部的核心组织。单位今年耗费几何,企业去年赚多少钱,平均成本在什么水平,为国家创造多少税收等等,所有这些信息,最终都通过财务账表的方式来体现。可以说,大家工作辛…

OSI/RM七层网络模型和网络协议

目录 1.OSI/RM七层网络模型1.1 结构图1.2 各层功能 2.OSI七层、TCP/IP四层、五层网络模型对比3.各层对应网络协议3.1 应用层3.2 传输层 1.OSI/RM七层网络模型 OSI/RM(Open System Interconnection/Reference Model,开放式系统互联参考模型)是…

前端到接口层的反序列化流程

前置知识 参考我的另一篇博客,(209条消息) Servlet和SpringMVC_fengwuJ的博客-CSDN博客,描述了Servlet与SpringMVC的关系,大致可以知道从前端请求,到后端接口的中间过程 反序列化流程 前篇文章中,走到 getMethodPara…

平台总线模型简介

1. 平台总线介绍 平台总线模型将一个驱动分成两部分 device.c, driver.c。一个描述硬件, 一个控制硬件。 平台总线通过比较字符串, 将name相同的device.c和driver.c匹配到一起来控制硬件。 driver通过平台总线去拿到device.c内容。 平台总线的优点是减少重复代码 提高效率。 …

中间件(三)- Kafka(一)

Kafka 1. Kafka简介1.1 名字由来1.2 主要特性1.3 相关术语1.4 架构图1.5 消息队列1.6 Kafka消费模式1. 一对一消费模式2. 一对多消费模式 1.7 消息中间件 2. Kafka安装及使用2.1 下载kafka2.2 修改配置文件2.3 启动2.4 docker启动 3. 简单指令3.1 topic相关3.2 Kafka 生产/消费…