Scalaアクターのプロパティは@volatileとしてマークされるべきですか?

StackOverflow https://stackoverflow.com/questions/1031167

質問

Scalaで、次のような単純なクラスがある場合:

val calc = actor {
  var sum = 0
  loop {
    react {
      case Add(n) => 
        sum += n
      case RequestSum =>
        sender ! sum
    }
  }
}

私のフィールド sum @volatile とマークされますか?アクターは論理的にシングルスレッド(つまり、メッセージは順次処理されます)ですが、個々の反応は別々のスレッドで発生する可能性があるため、 state 変数はあるスレッドから別のスレッドから読み取ります。

役に立ちましたか?

解決

それらをvolatileとしてマークする必要はありません。コードの実行は同期ブロック内ではありませんが、アクターはコードが呼び出される前に必ず1つを通過するため、スレッド間でメモリを一貫した状態に強制します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top