zoukankan      html  css  js  c++  java
  • 十、CAS

    一、什么是CAS

    Compare And Swap的缩写,中文翻译成比较并交换,实现并发算法时常用到的一种技术。它是一条CPU的原子指令,包含三个操作数——内存位置、预期原值及更新值。

    执行CAS操作的时候,将内存位置的值与预期原值比较。

    如果相匹配,那么处理器会自动将该位置值更新为新值。

    如果不匹配,处理器不做任何操作,多个钱程同时执行CAS操作只有一个会成功。

    缺点:

    1、如果CAS失败,会一直进行尝试。如果CAS长时间一直不成功,可能会给CPU带来很大的开销。

    2、CAS会导致“ABA问题”。(比如说一个线程1从内存位置V中取出A,这时候另一个线程2也从内存中取出A,并且线程2进行了一些操作将值变成了B,然后线程2又将V位置的数据变成A,这时候线程one1进行CAS操作发现内存中仍然是A,然后线程1操作成功。尽管线程1的CAS操作成功,但是不代表这个过程就是没有问题的。|)

    二、什么是Unsafe

    Unsafe是CAS的核心类,由于Java方法无法直接访问底层系统,需要通过本地(native)方法来访问,Unsafe相当于一个后门,基于该类可以直接操作特定内存的数据。Unsafe类存在于sun.misc包中,其内部方法操作可以像C的指针一样直接操作内存,因为Java中CAS操作的执行依赖于Unsafe类的方法。

    注意Unsafe类中的所有方法都是native修饰的,也就是说Unsafe类中的方法都直接调用操作系统底层资源执行相应任务。

  • 相关阅读:
    vue.js 初步学习
    IntelliJ IDEA 快捷键
    SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
    JavaScript基础概念与语法
    python 常见矩阵运算
    利用matplotlib的plot函数实现图像绘制
    基于密度峰值的聚类(DPCA)
    极角排序
    HDU-5514 Frogs (容斥)
    HDU
  • 原文地址:https://www.cnblogs.com/shiblog/p/15741511.html
Copyright © 2011-2022 走看看