Java多线程高并发编程中点点理解

CAS(Compare and Swap)是一种无锁编程技术,用于在多线程环境中安全地更新变量。然而,它面临ABA问题,即值在比较和交换过程中可能经历变化再回退到原始值,导致潜在的数据不一致。文章通过比喻解释了ABA问题,并提出通过添加版本号来避免此类问题,类似于Git的版本控制。CAS的原子性通常与硬件指令相关,确保操作的不可分割性。
摘要由CSDN通过智能技术生成

CAS (compare and swap/ compare and exchange)

比较与交换:不需要加锁实现的多线程安全访问?
CAS 流程图解
ABA问题,在比较当前值的时候,中间有值被修改 ,由原本的0 修改为2之后 再有线程修改为0 即:A -> B -> A 经过转换之后,再次比较读出的虽然是A 但是已经不是原来的A。

有人说:A还是A啊 ,有什么关系?
	假设:张三的女朋友跟张三分手后,经历了100个男朋友,然后再与张三复合。那么他们还是原来的他们吗?
	
ps:例子有些不太美妙,但是记忆深刻,万事理解就好

ABA问题解决: 添加版本号,每次更新就更新版本号,版本号不能相同,就如同Git上的索引

**CAS是如何实现的?
原子性的实现大多与下图中的lock有关系
在CPU层面做限制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值