zoukankan      html  css  js  c++  java
  • 原子操作(二)

    一、什么是原子操作

    不可被中断的一个或一系列操作

    二、Java中如何实现原子操作

    通过锁和循环CAS(自旋)的方式来实现

    三、什么是CAS(Compare And Swap)

    CPU的原子锁技术,由CPU提供的CMPXCHG指令保证

     1 //AtomicInteger的计数是典型的CAS
     2 public final int incrementAndGet() {
     3         for (;;) {
     4             int current = get();
     5             int next = current + 1;
     6             if (compareAndSet(current, next))
     7                 return next;
     8         }
     9 }
    10 
    11 //Unsafe调用操作系统的指令
    12 public final boolean compareAndSet(int expect, int update) {
    13         return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
    14

    四、CAS操作的三大问题

    1、ABA问题

    一个值原来是A,变成了B,又变成了A,CAS检测时以为值没有变化,其实已经变化。

    可通过增加版本号来解决ABA问题

    2、循环时间长cpu开销大

    3、只能保证一个共享变了的原子操作

     

     

     

  • 相关阅读:
    训练网络考虑内容
    阿斯顿
    wifi 模块Yeelink联网
    fpga串口通信的verilog驱动
    vga显示彩条
    状态机之二段式
    矩阵键盘
    error
    时钟
    Error(10028)
  • 原文地址:https://www.cnblogs.com/sunrisexq/p/8715958.html
Copyright © 2011-2022 走看看