使用CompareAndSwap
搜索可能出现的ABA问题 - 就像Read-Modify-Write
指令集一样,我发现Load-Linked/Store-Conditional
无锁 解决这个问题。
所以,我尝试使用LL/SC
- 指令集来实现整数CAS
。
public class LlscInteger {
private static final Unsafe U = getUnsafe();
private static final long VALUE_OFFSET;
private final Map<Integer, Integer> linkTracker;
private volatile int value;
public int loadLinked(){
return value;
}
public boolean storeConditional(int newVal){
//...
}
//Unsafe mechanics
}
问题是我无法原子地更新value
和linkTracker
。看看C ++ 11 std::atomic
我也找不到与LL/SC
类似的东西。 sun.misc.Unsafe
也不包含LL/SC
。
问题: 是否可以通过LL/SC
实施CAS
?如果是的话,你能给我一些建议吗?
我不知道如何使用volatile
实现LL / SC。商店条件如下:
public boolean storeConditional(int newVal){
if(//the value is not changed since the loadLinked call){
value = newValue
return true;
} else
return false;
}