您的位置:首页 > 其它

chapter15_原子变量与非阻塞同步机制_2_硬件对并发的支持

2019-03-19 15:54 417 查看
  • 独占锁synchronized是一项__悲观__技术, 它假设最坏的情况

  • CAS

    (1) 全名 Compare and Swap

    (2) 是一项__乐观__技术

    (3) CAS包含__3个__操作数

    1° 需要读写的内存位置V

    2° 进行比较的值A

    3° 准备写入内存的新值B

    (4) 具体操作

    当且仅当位置V的值等于A时, CAS才会通过__原子方式__将B写入V的位置, 否则不执行任何操作;

    无论V的值是否等于A, 都返回V原有的值

    (5) 含义

    认为V的值应该是A, 如果是就更新V的值为B; 如果不是就啥也不干并且告诉你本来V的值是多少

    (6) 使用示例: 非阻塞的计数器

    @ThreadSafe
    public class CasCounter {
    
    private SimulatedCAS value;
    
    public int getValue() {
    
    return value.get();
    }
    
    public int increment() {
    
    int v;
    
    do {
    v = value.get();
    } while (v != value.compareAndSwap(v, v + 1));
    
    return v + 1;
    }
    }

    在increment函数中, 首先会获取内存V处的值, 然后进行CAS操作: 如果获取到的值和v相等说明没有其他线程干扰, 因此可以更改V处的值; 否则就重复while循环

  • CAS的__优点__: 在竞争程度不高时, 性能远远超过锁的方式

    CAS的__缺点__: 调用者需要手动决定发生竞争时的策略(重试or回退or放弃)

  • JVM对CAS的支持

    (1) __原子变量类__使用了底层的JVM支持为数字类型和引用类型提供了一种高效的CAS操作

    (2) java.util.concurrent中的大多数类直接或间接的使用了这些原子变量类

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: