10

この質問は、Scalaアクターのプロパティを@volatileとマークする必要がありますか?に似ています。しかし、答えが同じになるかどうかはわかりません。

たとえば、フォークジョインディスパッチャーが構成されていて、アクターの状態が@volatileでマークされていない場合、アクターの状態は、フォークの場合、キャッシュ階層を介して1つのコア(またはプロセッサー)から別のコアに伝播されることが保証されますか? / joinワーカースレッドは異なるコア(またはプロセッサー)で実行されますか?

PS JSR133の後、キャッシュをメインメモリにフラッシュし、他のコア(またはプロセッサ)で実行されている他のスレッドでこのスレッドからの先行するすべての不揮発性書き込みを確認するために必要な揮発性変数への書き込み/読み取り操作は1回だけです。はいの場合、それは答えになる可能性があります。これは、ワークキューのスキャンにより、FJタスクの揮発性変数との間で読み取りと書き込みが行われるためです。

4

1 に答える 1

5

いいえ、アクターフィールドに揮発性を設定するべきではありません。なんで?

アクターがメッセージの処理中に内部状態に変更を加え、しばらくしてから別のメッセージを処理しているときにその状態にアクセスした場合。アクターモデルでは、同じスレッドが異なるメッセージに対して同じアクターを実行するという保証は得られないことを理解することが重要です。

すべてここにあります:http://doc.akka.io/docs/akka/2.0/general/jmm.html

PSに関しては、同じ揮発性フィールドに対して読み取り/書き込みを行って、発生前の保証を取得する必要があります。「揮発性ピギーバッキング」について読む

于 2012-04-15T22:31:45.050 に答える