2012-04-15 18 views
8

To pytanie wygląda podobnie do Should my Scala actors' properties be marked @volatile?, ale nie jest pewne, czy odpowiedź będzie taka sama.Czy moje obiekty aktorów Akka powinny być oznaczone jako @volatile?

Jako przykład, w przypadku gdy skonfigurowano dyspozytor wideł i stan aktora nie został oznaczony przez @volatile, jest zagwarantowane, że stan aktora będzie propagowany przez hierarchię pamięci podręcznej z jednego rdzenia (lub procesora) do innego, jeśli wątki robocze fork/join działają na różnych rdzeniach (lub procesorach)?

P.S. Czy to słuszne, że po JSR133 wystarczy jedna operacja zapisu/odczytu do dowolnej zmiennej lotnej wymaganej do wypróżnienia pamięci podręcznej do pamięci głównej i zobaczenia wszystkich poprzednich nieulotnych zapisów z tego wątku na innym wątku działającym na innym rdzeniu (lub procesorze)? Jeśli tak, to może to być odpowiedź, ponieważ skanowanie kolejki roboczej wykonuje niektóre odczyty i zapisuje od/do zmiennych zmiennych zadania FJ.

Odpowiedz

4

Nie, nie powinieneś umieszczać lotności na polach aktorów. Czemu?

jeśli aktorem wprowadza zmiany jego stanu wewnętrznego podczas przetwarzania wiadomości i dostęp ten stan podczas przetwarzania kolejnego komunikatu chwil później. Ważne jest, aby uświadomić sobie, że z modelem aktora nie masz żadnej gwarancji, że ten sam wątek będzie wykonywał ten sam wątek dla różnych wiadomości.

To wszystko jest tutaj: http://doc.akka.io/docs/akka/2.0/general/jmm.html

Odnośnie twojej PS, trzeba odczytu/zapisu do tego samego pola lotnej dostać się dzieje, zanim gwarancji. Czytaj na temat "lotnego niedopasowania"

Powiązane problemy