我的Akka演员的属性应该标记为@volatile吗?

时间:2012-04-15 20:04:53

标签: actor volatile akka

此问题与Should my Scala actors' properties be marked @volatile?类似,但不确定答案是否相同。

例如,如果配置了fork-join调度程序并且actor的状态没有被@volatile标记,那么是否保证actor的状态将通过缓存层次结构从一个核心(或处理器)传播到另一个如果fork / join工作线程在不同的核心(或处理器)上运行?

P.S。在JSR133之后只有一次写入/读取操作到/从任何易失性变量执行刷新缓存到主内存并在其他核心(或处理器)上运行的其他线程上看到来自此线程的所有前面的非易失性写入,这是正确的吗?如果是,则可以回答,因为扫描工作队列会执行一些读数并从/向FJ任务的volatile变量写入。

1 个答案:

答案 0 :(得分:5)

不,你不应该在你的actor领域放置volatile。为什么?

  

如果演员在处理a时对其内部状态进行了更改   消息,并在处理另一条消息时访问该状态   片刻之后。重要的是要认识到演员模型   你不能保证同一个线程将执行   不同消息的同一个演员。

一切都在这里:http://doc.akka.io/docs/akka/2.0/general/jmm.html

关于您的PS,您需要读取/写入相同的volatile字段以获得之前发生的保证。阅读“volatile piggybacking”