"Ternary CAS operation"理论上可以吗?

"Ternary CAS operation" theoretically possible?

我经常遇到这样的情况:

AtomicBoolean bool1 = new AtomicBoolean();
AtomicBoolean bool2 = new AtomicBoolean();

boolean expected = false; // whatever
boolean update = false; // whatever

if(bool1.get()) {
    bool2.compareSet(expected, update);
}

但这不起作用,因为 bool1.get()bool2.compareSet(...) 之间可以进行上下文切换。所以需要的是我称之为 "ternary atomic boolean" 的东西,它可以在一次 CAS 操作中完成 bool1.get()bool2.compareSet(...)

我的问题是能不能做到。有没有人知道有人也在考虑这个问题(一些大学)或者有没有人知道现有的解决方案接近所需的解决方案(我的意思是没有锁,同步块,互斥锁,信号灯,但使用 CAS仅基于算法)。

使用 AtomicInteger,它也有一个 CompareSet 方法,并将您的布尔值建模为位域。您可以在一个整数中建模 32 个布尔值。