CAS (compare-and-swap( :boolean compareAndSet(int expect, int update)
FAA(获取和添加( :int addAndGet(int delta)
???
TAS (测试和设置( : ???
在我的理解中:
CAS(比较和交换("同步"(在 CPU 指令级别没有锁(代码,如下所示:
if(a==b) {
a++; // or a = a + 7;
}
FAA(获取和添加(:"同步"(无锁,在CPU指令级别(代码,如下所示:
x = x + 7;
但我不确定"测试和设置"与什么样的代码有关。
Test-and-set 是一个原子 RMW 操作,它将内存位置的值设置为1
并返回旧值(1
或0
(。
Java 中没有"真正的"测试和设置操作,但您可以通过将1
传递给AtomicInteger::getAndSet
并期望它返回1
或0
来模拟它。或者,您可以通过将true
传递给AtomicBoolean::getAndSet
并期望true
或false
来模拟 TAS。
在您提供的增量变量的示例中,它不是很有用,因为 TAS 是二进制操作。