我经常遇到希望以某种方式解决问题的情况:
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 值进行建模。