我经常遇到希望以某种方式解决问题的情况:

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(...)之间可能存在上下文切换。因此,我需要一种叫做“三元 boolean ”的东西,它可以在一个CAS操作中完成bool1.get()bool2.compareSet(...)

我的问题是是否可以做到。是否有人知道有人也在考虑这个问题(某所大学),或者有人知道一个已经接近所需解决方案的现有解决方案(我的意思是没有锁,同步块(synchronized block),互斥体,信号量,但是使用了CAS)仅限基于算法的算法)。

最佳答案

使用AtomicInteger(也具有CompareSet方法),并将 boolean 值建模为位域。您可以在一个整数中对32个 boolean 值进行建模。

09-25 22:20