Diese Frage ähnelt Wenn die Eigenschaften meiner Scala-Akteure markiert sind @volatile? aber nicht sicher, ob die Antwort die gleiche ist.
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 Cachehierarchie von einem Core (oder Prozessor) an weitergegeben wird ein anderes, wenn fork / Join-Worker-Threads auf verschiedenen Kernen (oder Prozessoren) ausgeführt werden?
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.
Nein, Sie sollten nicht flüchtig auf Ihre Schauspielerfelder setzen. Warum?
wenn ein Akteur während der Verarbeitung von a Änderungen an seinem internen Zustand vornimmt Nachricht, und greift auf diesen Zustand während der Verarbeitung einer anderen Nachricht Augenblicke später. Es ist wichtig, dies mit dem Schauspielermodell zu erkennen Sie erhalten keine Garantie, dass derselbe Thread den Befehl ausführt derselbe Akteur für verschiedene Nachrichten.
Es ist alles hier: Ссылка
In Bezug auf Ihre PS müssen Sie in dasselbe flüchtige Feld lesen / schreiben, um die Vor-Vor-Garantie zu erhalten. Lesen Sie "flüchtiges Piggyback"