2

我正在阅读一篇关于非阻塞 CAS 的文章并遇到了这段代码:

public class SimulatedCAS {
  private int value;

  public synchronized int getValue() {
    return value;
  }

  public synchronized int compareAndSwap(int expectedValue, int newValue) {
     int oldValue = value;
     if (value == expectedValue)
         value = newValue;
     return oldValue;
  }
}

如果使用同步,这个 CAS 操作如何非阻塞?

如果我们的意思是这个客户端SimulatedCAS不需要实现它自己的同步,那么我们不是只是移动了阻塞而不是消除它吗?

4

1 回答 1

3

请注意,这是一个模拟的CAS(顾名思义);用 Brian Goetz 的话来说(清单来自他的“Java Concurrency In Practice”一书)

SimulatedCAS清单 15.1 中的示例说明了 CAS 的语义(但不是实现或性能)。

CAS的实际实现需要CPU支持,类从java.util.concurrent.atomic包中调用native方法。

于 2013-05-12T16:23:28.360 回答