Me dijeron que los actores (Scala) nunca realizan dos operaciones al mismo tiempo, lo que sugiere que el método act (o reaccionar? O recibir?) Está inherentemente sincronizado. Sé que una operación larga en un método act puede causar problemas de bloqueo, y supongo que el acceso a la cola de mensajes debe estar sincronizado de alguna manera ... pero ...comprensión del enhebrado de los actores en scala
Lo que se sugirió es que un actor reciba mensajes reveladores incrementar un contador interno incrementaría el contador de una manera segura para el hilo. Que no se procesarán dos mensajes de actualización simultáneamente, por lo que no hay dos mensajes que intenten actualizar el contador al mismo tiempo.
Un atributo de contador en un actor suena como "estado compartido".
¿Es realmente cierto que una operación así sería completamente segura para los hilos? Si es así, ¿cómo hace un actor para usar máquinas centrales múltiples de alguna manera eficiente? ¿Cómo es un actor multi enhebrado en absoluto?
Si no es así, ¿cuál es una forma idiomática apropiada para contar mensajes de forma segura sin necesidad de alguna variable sincronizada/volátil?
¡Esta es una gran explicación, gracias! – Brian
Buena respuesta. Yo agregaría que si bien las reacciones de un actor pueden ejecutarse en diferentes hilos (y por lo tanto 'normalmente' estarían sujetas a problemas de acceso a la memoria), en realidad no necesita sincronizar el acceso al estado del actor. Esto se debe a que el marco del actor ya lo hace antes de ejecutar un actor. Ver http://stackoverflow.com/questions/1031167/should-my-scala-actors-properties-be-marked-volatile –
Me alegro de que ayude. Régis: Gracias, actualizó el texto para ser más preciso. – ron