zoukankan      html  css  js  c++  java
  • CAS

    1:什么是CAS?
    CAS是Compare And Swap的简写。CAS有三个操作数:
    V:内存值
    A:旧的预期值
    B:要修改的新值
    当且仅当预期值A与内存值V相等的时候,将内存值修改为B,否则什么都不做。CAS由机器CPU硬件实现,所以该概念属于底层硬件概念。

    2:CAS实现
    CAS保存读-写-修改,三个串联操作为原子操作,基于总线锁定和缓存一致性。


    3:总线锁定技术
    CPU芯片与各个芯片之间通过总线连通。总线负责CPU与外界各个组件连通(包括缓存,内存)。所以当有一个cpu0核在做CAS操作的时候,总线发出一个LOCK#信号。这个时候就将CPU与内存间的通信锁住了,从而cpu0一个核独享内存。所以cpu0完成CAS操作就保证了原子性。


    4:缓存一致性
    简单讲某颗CPU对缓存中的数据做了修改后,通知其他CPU放弃存在他们内部的缓存。

    5:CAS应用范例
    AtomicInteger类的如下方法:
    /**
    * Atomically increments by one the current value.
    *
    * @return the previous value
    */
    public final int getAndIncrement() {
    for (;;) {
    int current = get();
    int next = current + 1;
    if (compareAndSet(current, next))
    return current;
    }
    }

    假设value值初始化为2,现在调用getAndIncrement(),则value值变成3。如果做到原子更新的呢?
    看循环里面,current值是从内存中获取的,为2。next值为3。因为current值与value值都为2,相等。所以compareAndSet(2,3)会执行将next值赋值给内存中value变量,从而value值变成了3。

  • 相关阅读:
    javascript时间戳和日期字符串相互转换
    jquery两稳定版本比较~~
    原生的强大DOM选择器querySelector
    分享一个自定义的 console 类,让你不再纠结JS中的调试代码的兼容
    基于Mesos运行Spark
    chrome插件 postman 可以调用restful服务
    cassandra优秀博客集
    Cassandra监控
    Cassandra
    SecureCRT中文显示乱码的解决方法
  • 原文地址:https://www.cnblogs.com/xinxinwang/p/4800094.html
Copyright © 2011-2022 走看看