Java AtomicInteger类中getAndIncrement方法中的旋转是什么意思?

Java AtomicInteger类中getAndIncrement方法中的旋转是什么意思?,java,compare-and-swap,atomicinteger,Java,Compare And Swap,Atomicinteger,在AtomicInteger类的getAndIncrement方法中,调用不安全类的getAndAddInt方法,该方法包含compareAndSwapInt方法和spin(do…while)。 compareAndSwapInt方法是线程安全的,那么为什么不只是更改compareAndSwapInt方法中的值,还需要自旋来确保安全呢? 谢谢你的回答。你在寻找什么来源?至少从JDK11开始,并且仍然在当前的JDK16中,的实现是: 我不知道你是从哪里得到的 上面的代码有一个旋转,因为CAS总是这

在AtomicInteger类的getAndIncrement方法中,调用不安全类的getAndAddInt方法,该方法包含compareAndSwapInt方法和spin(do…while)。 compareAndSwapInt方法是线程安全的,那么为什么不只是更改compareAndSwapInt方法中的值,还需要自旋来确保安全呢?
谢谢你的回答。

你在寻找什么来源?至少从JDK11开始,并且仍然在当前的JDK16中,的实现是:

我不知道你是从哪里得到的

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

  • 获取当前值(它是5)
  • 告诉CPU:嘿,CPU,如果值仍然是5,你能把它设为7吗?否则,请不要做任何事情。告诉我你是否成功了
  • 如果你成功了,那太好了。返回5
  • 如果没有,请返回1。继续这样做,直到CAS运作正常为止
  • int v;
    do {
      v = getIntVolatile(o, offset);
    } while (!weakCompareAndSetInt(o, offset, v, v + delta));
    return v;