原子变量原理

本文以AtomicInteger的addAndGet方法为例,介绍了计算机如何利用xchg指令实现原子性的交换内存和寄存器的值。深入探讨了Cas机制作为乐观锁的工作原理,以及其假设下多线程环境下变量值的修改策略。

以 AtomicInteger 的 addAndGet 方法为例。

计算机有一个 xchg 指令,它可以原子性的交换内存和寄存器的值。

1、调用 addAndGet 方法时,先获取原子变量当前值并加一存在寄存器中。

2、使用 xchg 指令把这个值跟内存中变量的值交换。

假如内存中当前值是 7,那么使用 xchg 指令之后内存中的值会变成 8,而寄存器中的值变成 7。

3、把寄存器中返回的值跟第一次读取到的变量值 7 对比。

如果相等说明没有其它线程在这个 读-改 操作中修改过内存中变量的值,把寄存器中返回的值加一并返回。

如果两个值不相等,重复 1-2-3 步骤。

Cas 被称为乐观锁,它假设不会有多个线程同时修改变量的值。如果有,就基于新值重新修改变量。

如果一个线程在执行 1 步骤后有其它线程把内存中的值从 7 改成别的值,再改成 7,那么这个线程对此是无感知的。


转载于:https://juejin.im/post/5ad781825188252ead091a0a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值