我正在阅读一篇关于非阻塞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
的客户端不需要实现自己的同步,那么我们是不是只是移动了阻塞而不是消除它?
答案 0 :(得分:3)
请注意,这是一个模拟 CAS(顾名思义);用Brian Goetz的话说(这个列表来自他的“Java Concurrency In Practice”一书):
清单15.1中的
SimulatedCAS
说明了CAS的语义(但不是实现或性能)。
CAS的实际实施需要CPU支持,来自java.util.concurrent.atomic
包调用native
方法的类。