CAS 底层原理与 ABA 问题
CAS 定义
CAS(Compare And Swap)是一种无锁算法。CAS 算法是乐观锁的一种实现。
CAS 有 3 个操作数,内存值 V,旧的预期值 A,要修改的新值 B。当预期值 A
和内存值 V 相同时,将内存值 V 修改为 B 并返回 true,否则返回 false。
CAS 与 synchronized
(1)synchronized 加锁,同一时间段只允许一个线程访问,能够保证一致性但
是并发性下降。
(2)CAS 是一个自旋锁算法,使用 do-while 不断判断(没有加锁),保证一致
性和并发性,但是比较消耗 CPU 资源。使用 CAS 就可以不用加锁来实现线程
安全。
� 原子性保证:CAS 算法依赖于 rt.jar 包下的 sun.misc.Unsafe 类,该类中的所有方
法都是 native 修饰的,直接调用操作系统底层资源执行相应的任务。
� 内存可见性和禁止指令重排序的保证:AtomicXxx 类中的成员变量 value 是由
volatile 修饰的:private volatile int value;
CAS 算法的缺点
CAS 虽然很高效的解决了原子操作问题,但是 CAS 仍然存在三大问题。
� 循环时间长、开销很大。
当某一方法比如:getAndAddInt 执行时,如果 CAS 失败,会一直
进行尝试。如果 CAS 长时间尝试但是一直不成功,可能会给 CPU
带来很大的开销。
� 只能保证一个共享变量的原子操作。
>
评论0
最新资源