7

在 Scala 中,如果我有一个简单的类,如下所示:

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

我的领域sum应该被标记@volatile吗?虽然参与者在逻辑上是单线程的(即消息是按顺序处理的),但各个反应可能发生在单独的线程上,因此state变量可能会在一个线程上被更改,然后从另一个线程读取。

4

1 回答 1

6

您不需要将它们标记为易失性。代码的执行不在同步块内,但参与者将始终在调用代码之前通过一个同步块,从而强制内存跨线程进入一致状态。

于 2009-06-23T11:31:09.803 回答