2012-04-15 5 views
8

Diese Frage ähnelt Should my Scala actors' properties be marked @volatile?, ist aber nicht sicher, ob die Antwort die gleiche ist.Sollten die Eigenschaften meiner Akka-Darsteller @volatile sein?

Wenn beispielsweise der Fork-Join-Dispatcher konfiguriert wurde und der Status des Actors nicht durch @volatile markiert wurde, wird garantiert, dass der Status des Actors durch die Cache-Hierarchie von einem Core (oder Prozessor) weitergegeben wird. zu einem anderen wenn Fork/Join Worker-Threads auf verschiedenen Kernen (oder Prozessoren) laufen?

P.S. Ist es richtig, dass nach JSR133 nur eine Schreib-/Leseoperation zu/von irgendeiner flüchtigen Variablen benötigt wird, um den Cache zum Hauptspeicher zu leeren und alle vorhergehenden nicht-flüchtigen Schriften von diesem Thread auf anderen Threads zu sehen, die auf einem anderen Kern (oder Prozessor) laufen? Wenn ja, dann kann es eine Antwort sein, da das Scannen der Arbeitswarteschlange einige Lesungen und Schreiben von/zu flüchtigen Variablen der FJ-Aufgabe durchführt.

Antwort

4

Nein, Sie sollten nicht volatil auf Ihre Actor-Felder setzen. Warum?

wenn ein Schauspieler Änderungen an seinen internen Zustand macht, während eine Nachricht verarbeitet, und greift auf diesen Zustand, während eine andere Nachricht später Momente verarbeiten. Es ist wichtig zu wissen, dass Sie mit dem Actor Model keine Garantie bekommen, dass der gleiche Thread den gleichen Actor für verschiedene Nachrichten ausführt.

Es ist alles hier: http://doc.akka.io/docs/akka/2.0/general/jmm.html

In Bezug auf Ihren PS, müssen Sie/Schreiben auf das gleiche flüchtige Feld zu lesen, das passiert-vor-Garantie zu bekommen. Lesen Sie weiter auf "flüchtige Piggybacking"

Verwandte Themen