Scala では、次のような単純なクラスがあるとします。
val calc = actor {
var sum = 0
loop {
react {
case Add(n) =>
sum += n
case RequestSum =>
sender ! sum
}
}
}
フィールドsum
にマークを付ける必要があり@volatile
ますか? アクターは論理的にシングルスレッド(つまり、メッセージが順次処理される) ですが、個々の反応は別々のスレッドで発生する可能性があるため、state
変数が 1 つのスレッドで変更され、別のスレッドから読み取られる可能性があります。