8.5 CAS

作者: jadefly | 来源:发表于2018-01-09 13:39 被阅读0次

    概念

    JNI(Java本地方法):使得java程序越过JVM直接调用本地方法提供了一种便捷的方式;

    CAS:1.是现代 CPU 广泛支持的一种对内存中的共享数据进行操作的一种特殊指令,会对内存中的共享数据做原子的读写操作;

                2.compare and swap比较并交换,利用CPU的CAS指令,同时借助JNI来完成Java的非阻塞算法;

                3.有3个操作数,当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则返回V;

                4.Synchronized是一种悲观锁,它认为在它修改之前,一定会有其它线程去修改它,悲观锁效率很低;

                5.CAS是乐观锁的思路,它相信在它修改之前,没有其它线程去修改它;


    存在问题

    1.ABA问题:如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了;

    2.循环时间长开销大:自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销;

    3.只能保证一个共享变量的原子操作:多个共享变量操作时,循环CAS就无法保证操作的原子性;


    相关文章

      网友评论

          本文标题:8.5 CAS

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