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

时间:2015-02-18 09:40:26

标签: 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);
}

但这不起作用,因为bool1.get()bool2.compareSet(...)之间可能存在上下文切换。所以需要的是我称之为“三元原子布尔”的东西,它可以在一次CAS操作中执行bool1.get()bool2.compareSet(...)

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

1 个答案:

答案 0 :(得分:5)

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