2012-04-15 19 views
8

Esta pregunta es similar a Should my Scala actors' properties be marked @volatile? pero no estoy seguro de que la respuesta sea la misma.¿Deberían las propiedades de mis actores Akka ser marcadas @volatile?

Como ejemplo, en el caso de que se configuró el distribuidor fork-join y el estado del actor no estaba marcado por @volatile, se garantiza que el estado del actor se propagará a través de la jerarquía de caché desde un núcleo (o procesador) a otro si los hilos fork/join worker se ejecutan en diferentes núcleos (o procesadores)?

P.S. ¿Es correcto que después de JSR133 solo una operación de escritura/lectura ay desde cualquier variable volátil requerida para enjuagar el caché a la memoria principal y ver todas las escrituras no volátiles precedente de este hilo en otro hilo que se ejecuta en otro núcleo (o procesador)? Si es así, entonces puede ser una respuesta, porque el escaneo de la cola de trabajo hace algunas lecturas y escribe desde/hacia variables volátiles de la tarea de FJ.

Respuesta

4

No, no debe poner volátil en sus campos de actor. ¿Por qué?

si un actor realiza cambios en su estado interno al procesar un mensaje y accede a ese estado durante el procesamiento de otro mensaje momentos después. Es importante tener en cuenta que con el modelo de actor no se garantiza que el mismo hilo ejecute el mismo actor para mensajes diferentes.

Todo está aquí: http://doc.akka.io/docs/akka/2.0/general/jmm.html

En cuanto a su PS, es necesario leer/escribir en el mismo campo volátil para obtener la garantía de que ocurre antes. Lea sobre "volteretas piggybacking"

Cuestiones relacionadas