CAS

CAS通过调用JNI的代码实现的。JNI:Java Native Interface为JAVA本地调用,允许java调用其他语言。

而compareAndSwapInt就是借助C来调用CPU底层指令实现的。下面从分析比较常用的CPU(intel x86)来解释CAS的实现原理。

下面是sun.misc.Unsafe类的compareAndSwapInt()方法的源代码:

 

public final native boolean compareAndSwapInt(Object o, long offset,
                                              int expected,
                                              int x);

  • 执行函数:CAS (V, E ,N)
    • V表示要更新的变量
    • E表示预期值
    • N表示新值
  • 如果V值等于E值,则将V的值设为N。若V值和E值不同,则说明已经有其他线程做了更新,则当前线程要么什么都不做,要么循环检测V与E是否一致
posted @ 2019-09-20 15:46  Chris,Cai  阅读(177)  评论(0编辑  收藏  举报