以原子方式修改int值

时间:2017-10-21 21:10:06

标签: java multithreading integer

使用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
}

问题是我无法原子地更新valuelinkTracker。看看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;
}

0 个答案:

没有答案