[英]“Ternary CAS operation” theoretically possible?
我经常遇到希望以某种方式解决问题的情况:
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)仅限基于算法的算法)。
使用AtomicInteger(也具有CompareSet方法),将布尔值建模为位域。 您可以在一个整数中对32个布尔值进行建模。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.