"三元CAS操作"理论上可行吗?

Oll*_*liP 1 java multithreading compare-and-swap

我经常遇到这样的情况,我希望这个问题可以像这样解决:

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

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

if(bool1.get()) {
    bool2.compareSet(expected, update);
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为可以在bool1.get()和之间进行上下文切换bool2.compareSet(...).那么,什么是需要的是我会称之为"三元原子布尔",这是一件好事,可以做bool1.get()bool2.compareSet(...)在一个CAS操作.

我的问题是它是否可以完成.有没有人知道有人在考虑这个问题(一些大学)或有人知道现有的解决方案接近所需(我的意思是没有锁,同步块,互斥,semapores,但使用CAS仅基于算法).

Erw*_*idt 5

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