什么是CAS
CAS即Compare And Swap的缩写,翻译成中文就是比较并交换,其作用是让CPU比较内存中某个值是否和预期的值相同,如果相同则将这个值更新为新值,不相同则不做更新,也就是CAS是原子性的操作(读和写两者同时具有原子性),其实现方式是通过借助C/C++调用CPU指令完成的,所以效率很高。
CAS的原理很简单,这里使用一段Java代码来描述
public boolean compareAndSwap(int value, int expect, int update) {
// 如果内存中的值value和期望值expect一样 则将值更新为新值update
if (value == expect) {
value = update;
return true;
} else {
return false;
}
}
大致过程是将内存中的值、我们的期望值、新值交给CPU进行运算,如果内存中的值和我们的期望值相同则将值更新为新值,否则不做任何操作。这个过程是在CPU中完成的,这里不好描述CPU的工作过程,就拿Java代码来描述了。
Unsafe源码分析
Java是在Unsafe(sun.misc.Unsafe)类实现CAS的操作,而我们知道Java是无法直接访问操作系统底层的API的(原因是Java的跨平台性限制了Java不能和操作系统耦合),所以Java并没有在Unsafe类直接实现CAS的操作,而是通过**JDI(Java Native Interface)**本地调用C/C++语言来实现CAS<

本文详细介绍了Java中的CAS(Compare and Swap)原理,包括其通过Unsafe类在底层的实现,以及CAS的三大缺点:ABA问题、循环时间长开销大和仅保证单个共享变量的原子操作。此外,还探讨了ABA问题的危害及其解决方案,并提到了CAS在多线程同步中的应用,如作为乐观锁的一种实现方式。
最低0.47元/天 解锁文章
431





