极简CAS

作者: chozee | 来源:发表于2020-12-24 13:28 被阅读0次

CAS

  1. 乐观锁

  2. compare and then swap else 自旋

Atomic的核心操作就是CAS(compare and set,利用CMPXCHG指令实现,它是一个原子指令),该指令有三个操作数,变量的内存值V(value的缩写),变量的当前预期值E(exception的缩写),变量想要更新的值U(update的缩写),当内存值和当前预期值相同时,将变量的更新值覆盖内存值,执行伪代码如下。

if(V == E){ 
 V = U 
 return true 
}else{ 
 return false 
}

CAS问题:

  • 自旋时间可能过长

  • ABA问题,旧值从A->B->A,这样看不出变化

解决方案:

  1. 加版本号(戳)

CAS本质还是需要CPU硬件指令进行支持

某些CPU指令系统中引入了test_and_set、test_and_clear等指令用于临界资源互斥

CAS 并发原语体现在 Java 语言中的 sum.misc.Unsafe 类中的各个方法。调用 Unsafe 类中的 CAS 方法, JVM 会帮助我们实现出 CAS 汇编指令。这是一种完全依赖于硬件的功能,通过它实现了原子操作。再次强调,由于 CAS是一种系统原语,原语属于操作系统用于范畴,是由若干条指令组成的,用于完成某个功能的一个过程,并且原语的执行必须是连续的,在执行过程中不允许被中断,CAS 是一条 CPU 的原子指令,不会造成数据不一致问题。

我们常用的 java.util.concurrent 包就建立在CAS之上。

Java的Automic 包的CAS实现

valatile

Unsafe通过native method直接操作特定内存地址中的数据

AtomicInteger 中的变量 valueOffset 表示该变量值在内存中的偏移地址,因为 UnSafe 就是根据内存偏移地址获取数据

如何保证原子性

本质还是互斥锁实现的compareAndSwap

相关文章

  • 极简CAS

    CAS 乐观锁 compare and then swap else 自旋 Atomic的核心操作就是CAS(co...

  • 极简主义

    1、欲望极简2、精神极简3、物质极简4、信息极简5、表达极简6、工作极简7、生活极简

  • 新年Flag(三)

    1.实践极简生活(物质极简,工作极简,社交极简,学习极简,精神极简,信息极简),实践微习惯。 2.工作 团队管理框...

  • Less is more

    Less is more,少即是多。 一直向往极简的生活:房间极简、社交极简、沟通极简、生活极简、内心极简…… 《...

  • 极简主义

    想看弗格斯 奥康奈尔的《极简主义》,源于书背面提到的沟通极简、信息极简、物质极简、精神极简、感情极简、工作极简和生...

  • 践行极简生活意义

    文/艾尼 极简生活,不仅是家居的极简、饮食的极简、人际的极简,更是精神的极简、生活风格的极简。 践行极简生活,减少...

  • 过有质量、更高效的生活

    人民日报又开始倡导极简生活方式,推荐大家欲望极简、精神极简、物质极简、信息极简和表达极简的生活方式。 欲望极简,不...

  • 极简的力量

    少即是多。拥有越少,人生越自由。 物质极简,信息极简,精神极简,人脉极简,处事极简,欲望极简。 扔掉旧观念,留下新...

  • 读《极简力》——极简,才是最有力的生活

    刚完成《极简力》阅读,书中以“越简单、越精致“为核心,从欲望极简、感情极简、物质极简、工作极简、生活极简五个方面进...

  • 极简为什么有力量?

    最近,极简概念被应用到了各个领域。极简家居,极简生活,极简读书,甚至有了极简饮食。在日本文化中对于极简有着更极...

网友评论

    本文标题:极简CAS

    本文链接:https://www.haomeiwen.com/subject/hglmnktx.html