0

CAS(比较和交换):boolean compareAndSet(int expect, int update)

FAA(获取并添加):int addAndGet(int delta)???

TAS(测试和设置):???

据我了解:

CAS(比较和交换)“同步”(不带锁,在 CPU 指令级别)代码如下:

if(a==b) {
  a++;  // or a = a + 7;
}

FAA ( fetch-and-add ):“同步”(无锁,在 CPU 指令级别)代码如下:

x = x + 7;

但我不确定与哪种代码“测试和设置”相关。

4

1 回答 1

1

Test-and-set 是一种原子 RMW 操作,它将内存位置的值设置为1并返回旧值(或10)。

Java 中没有“真正的”测试和设置操作,但您可以通过传递1AtomicInteger::getAndSet并期望它返回1或来模拟它0true或者,您可以通过传递到AtomicBoolean::getAndSet并期望trueor来模拟 TAS false

在您提供的增加变量的示例中,它不是那么有用,因为 TAS 是二进制操作。

于 2019-09-09T08:04:26.483 回答