2012-04-15 8 views
8

この質問はShould my Scala actors' properties be marked @volatile?と似ていますが、その答えは同じであるかどうかはわかりません。Akkaのアクタのプロパティを@volatileにする必要がありますか?

例として、fork-joinディスパッチャーが構成され、アクターの状態が@volatileでマークされていない場合、アクターの状態が1つのコア(またはプロセッサー)からキャッシュ階層を介して伝播され、 fork/joinワーカースレッドが別のコア(またはプロセッサ)上で実行されている場合

P.S. JSR133の後に、主メモリへのキャッシュのフラッシュと他のスレッド(またはプロセッサ)上で実行されている他のスレッド上のこのスレッドからのすべての不揮発性の書き込みを参照するために必要なvolatile変数への書き込み/読み出し操作は1回だけです。もしあれば、それは答えることができます。なぜなら、作業待ち行列のスキャンは、いくつかの読みを行い、FJタスクの揮発性変数からの書き込みであるからです。

答えて

4

いいえ、あなたはあなたの俳優のフィールドに揮発性を置くべきではありません。どうして?

俳優 メッセージの処理中に内部状態への変更を行い、 モーメント後で別のメッセージを処理している間、その状態にアクセスする場合。アクターモデル を使用すると、同じスレッドが異なるメッセージに対して同じアクターを実行するという保証はありません。

それはここにすべてです:あなたのPSについてhttp://doc.akka.io/docs/akka/2.0/general/jmm.html

、あなたは事前発生保証を得るために、同じvolatileフィールドへの読み取り/書き込みする必要があります。 「揮発性ピギーバック」を読む

関連する問題