2

ノンブロッキング CAS に関する記事を読んでいて、次のコードに出くわしました。

public class SimulatedCAS {
  private int value;

  public synchronized int getValue() {
    return value;
  }

  public synchronized int compareAndSwap(int expectedValue, int newValue) {
     int oldValue = value;
     if (value == expectedValue)
         value = newValue;
     return oldValue;
  }
}

同期を使用する場合、この CAS 操作はどのようにノンブロッキングですか?

このクライアントがSimulatedCAS独自の同期を実装する必要がないことを意味する場合、ブロッキングを排除する代わりに移動しただけではありませんか?

4

1 に答える 1

3

これはシミュレートされた CAS であることに注意してください (名前自体が示すように)。Brian Goetz の言葉(このリストは彼の "Java Concurrency In Practice" の本から引用しています) :

SimulatedCASリスト 15.1 の は、CAS のセマンティクス (実装やパフォーマンスではない) を示しています。

CAS の実際の実装には、CPU サポート、java.util.concurrent.atomicパッケージからのクラス呼び出しnativeメソッドが必要です。

于 2013-05-12T16:23:28.360 に答える