CASアルゴリズム、変数原子

1、CASアルゴリズム

  • CAS(比較交換)は、共有データへの同時アクセスを管理するための特別なコマンドで動作するように設計されたマルチプロセッサの同時プロセッサのハードウェアサポートです。
  • CASはロックフリーのための非ブロッキングアルゴリズムを達成することです。
  • CASは、メモリ値を読み出すために3つのオペランド、Vニーズを含み、比較がA、Bは、新しい値を書き込みしようとする値。
  • もし、値がVアトミックな方法の値を更新することによって、新たな価値を持つV A、B CASに等しい場合にのみ、それは何もしないでしょう。
CASシミュレーションアルゴリズム
/**
 * @author zhengzheng046
 */
public class TestCompareAndSwap {

    public static void main(String[] args) {
        final CompareAndSwap compareAndSwap = new CompareAndSwap();
        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                int expectvalue = compareAndSwap.get();
                boolean b = compareAndSwap.compareAndSet(expectvalue, (int) (Math.random() * 101));
                System.out.println("[" + b + "]");
            }).start();
        }
    }
}


class CompareAndSwap {

    private int value;

    public synchronized int get() {
        return value;
    }

    /**
     * 比较,旧值与期望值相等时,将新值赋给旧值变量
     *
     * @param expectValue
     * @param newValue
     * @return
     */
    public synchronized int compareAndSwap(int expectValue, int newValue) {
        int oldValue = value;
        if (oldValue == expectValue) {
            this.value = newValue;
        }
        return oldValue;
    }

    //设置
    public synchronized boolean compareAndSet(int expectValue, int newValue) {
        return expectValue == compareAndSwap(expectValue, newValue);
    }
}
公開された21元の記事 ウォンの賞賛4 ビュー515

おすすめ

転載: blog.csdn.net/weixin_39617728/article/details/104807145