CAS原理

Catalogue   

CAS原理

在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较,只有在相同的情况下,
将该内存位置的内容修改 为新的给定值。 这是作为单个原子操作完成的。 原子性保证新值基于最新信息计算; 如果 该值在同一时间被另一个线程更新,则写入将失败。
操作结果必须说明是否进行替换; 这 可以通过一个简单的布尔响应(这个变体通常称为比较和设置),或通过返回从内存位置读取的值来完成。

CAS带来的问题

多线程情况下,每个线程使用 CAS 操作欲将数据 A 修改成 B,当然我们只希望 只有一个线程能够正确的修改数据,并且只修改一次。当并发的时候,其中一个
线程已经将 A 成功的改成了 B,但是在线程并发调度过程中尚未被调度,在这个期间,另外一个线程(不在并发中的请求线程)将 B 又修改成了 A,
那么原来并发中的线程又可以通过 CAS 操作将 A 改成 B。

解决办法

java 中提供了 AtomicStampedReference 来解决这个问题,它是基于版本或者是 一种状态,在修改的过程中不仅对比值,也同时会对比版本号