【问题标题】:What is the meaning of the spin in the getAndIncrement method in the AtomicInteger class?AtomicInteger类中getAndIncrement方法中的spin是什么意思?
【发布时间】:2021-04-11 14:19:15
【问题描述】:

在AtomicInteger类的getAndIncrement方法中,调用了unsafe类的getAndAddInt方法,其中包含compareAndSwapInt方法和spin(do...while)。 compareAndSwapInt 方法是线程安全的,那么为什么不只是改变 compareAndSwapInt 方法中的值,还需要 spin 是安全的呢? 谢谢你的回答。

【问题讨论】:

    标签: java compare-and-swap atomicinteger


    【解决方案1】:

    你在看什么来源?至少从JDK11开始,并且还在当前的JDK16中,Unsafe's getAndAddInt的实现是:

    int v;
    do {
      v = getIntVolatile(o, offset);
    } while (!weakCompareAndSetInt(o, offset, v, v + delta));
    return v;
    

    我不知道你从哪里得到compareAndSwapInt

    上面的代码有一个旋转,因为 CAS 总是这样工作。 (比较并设置):该代码表示​​,例如,当前为“5”的 AtomicInteger 并且您正在尝试向其添加 2:

    1. 获取当前值(为 5)
    2. 告诉CPU:嘿,CPU,IF这个值是还是5,你能把它变成7吗?否则,请不要做任何事情。告诉我你是否成功了。
    3. 如果你成功了,那就太好了。返回 5。
    4. 如果没有,请返回 1。并继续这样做,直到 CAS 操作正常。

    【讨论】:

      猜你喜欢
      • 2013-11-14
      • 1970-01-01
      • 2017-02-19
      • 2016-10-17
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      相关资源
      最近更新 更多