Scalaアクターのプロパティは@volatileとしてマークされるべきですか?
-
06-07-2019 - |
質問
Scalaで、次のような単純なクラスがある場合:
val calc = actor {
var sum = 0
loop {
react {
case Add(n) =>
sum += n
case RequestSum =>
sender ! sum
}
}
}
私のフィールド sum
は @volatile
とマークされますか?アクターは論理的にシングルスレッド(つまり、メッセージは順次処理されます)ですが、個々の反応は別々のスレッドで発生する可能性があるため、 state
変数はあるスレッドから別のスレッドから読み取ります。
解決
それらをvolatileとしてマークする必要はありません。コードの実行は同期ブロック内ではありませんが、アクターはコードが呼び出される前に必ず1つを通過するため、スレッド間でメモリを一貫した状態に強制します。
所属していません StackOverflow