繁体   English   中英

AtomicInteger class中getAndIncrement方法中的spin是什么意思?

[英]What is the meaning of the spin in the getAndIncrement method in the AtomicInteger class?

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

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

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,如果这个值还是5,你能把它变成 7 吗? 否则,请不要做任何事情。 告诉我你是否成功了。
  3. 如果你成功了,那就太好了。 返回 5。
  4. 如果你没有,go 回到 1。并继续这样做,直到 CAS 操作正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM