我的Akka演员的属性应该标记为@volatile吗?
问题描述:
此问题与Should my Scala actors' properties be marked @volatile?类似,但不确定答案是否相同。例如,如果配置了fork-join调度程序并且actor的状态未由@volatile标记,则保证actor的状态将通过来自一个内核(或处理器)的缓存层次结构进行传播,如果fork/join工作线程在不同的核心(或处理器)上运行,那么到另一个?我的Akka演员的属性应该标记为@volatile吗?
P.S.在JSR133之后,对于将缓存刷新到主内存并查看其他内核(或处理器)上运行的其他线程上的此线程的所有非易失性写入所需的任何易失性变量,只有一次对JSR133执行写入/读取操作是正确的吗?如果是,那么它可以是答案,因为工作队列的扫描执行一些读取和从/向FJ任务的易失性变量写入。
答
不,你不应该把挥发性放在你的演员领域。为什么?
如果演员使得改变其内部状态在处理 消息,以及访问该状态,而 片刻之后处理另一消息。请务必认识到,对于演员模型 ,您不能保证相同的线程将针对不同的消息执行相同的演员 。
这一切都在这里:http://doc.akka.io/docs/akka/2.0/general/jmm.html
关于你的PS,则需要读/写同一易失性领域得到之前发生的保证。阅读“易变的捎带”