我经常遇到这样的情况,我希望这个问题能得到这样的解决:
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(...)之间可能存在上下文切换。因此,我们需要的是我称之为“三元原子布尔”的东西,它可以在一个CAS操作中执行bool1.get()和bool2.compareSet(...)。
我的问题是能否做到这一点。是否有人知道有人也在考虑这个问题(某所大学),或者有人知道一个接近所需的现有解决方案(我指的是没有锁、同步块、互斥、符号,但只使用基于CAS的算法)。
发布于 2015-02-18 12:29:01
使用AtomicInteger,它也有一个CompareSet方法,并将布尔值建模为位字段。你可以在一个整数中建立32个布尔的模型。
https://stackoverflow.com/questions/28580245
复制相似问题