2012-04-15 79 views
8

此問題與Should my Scala actors' properties be marked @volatile?類似,但不確定答案是否相同。例如,如果配置了fork-join調度程序並且actor的狀態未由@volatile標記,則保證actor的狀態將通過來自一個內核(或處理器)的緩存層次結構進行傳播,如果fork/join工作線程在不同的核心(或處理器)上運行,那麼到另一個?我的Akka演員的屬性應該標記爲@volatile嗎?

P.S.在JSR133之後,對於將緩存刷新到主內存並查看其他內核(或處理器)上運行的其他線程上的此線程的所有非易失性寫入所需的任何易失性變量,只有一次對JSR133執行寫入/讀取操作是正確的嗎?如果是,那麼它可以是答案,因爲工作隊列的掃描執行一些讀取和從/向FJ任務的易失性變量寫入。

回答

4

不,你不應該把揮發性放在你的演員領域。爲什麼?

如果演員使得改變其內部狀態在處理 消息,以及訪問該狀態,而 片刻之後處理另一消息。請務必認識到,對於演員模型 ,您不能保證相同的線程將針對不同的消息執行相同的演員 。

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

關於你的PS,則需要讀/寫同一易失性領域得到之前發生的保證。閱讀「易變的捎帶」