No, aún debe considerar la seguridad de las hebras en Erlang, pero los problemas son mucho más simples de resolver.
He leído an article en el cual el autor señaló que su mensaje API puede causar problemas de enhebrado. El ejemplo giró en torno a una cuenta bancaria. Su mensaje inicial API tenía operaciones GET y SET. Algunos códigos que querían depositar $ 100 obtendrían el valor actual, agregarían 100 y luego SET el resultado. Por supuesto, esto solo funciona si un proceso único está accediendo a la cuenta bancaria. Una vez que dos procesos están manipulando el saldo, todas las apuestas están desactivadas.
Su solución fue cambiar el mensaje API a DEPÓSITO y RETIRO (en realidad usa un mensaje - ACTUALIZAR - pero se entiende la idea). Esto hace que la interacción asuma semántica atómica: el proceso de escucha solo procesará un depósito o retiro a la vez, y bloqueará otras solicitudes hasta que se complete la primera.
Vale la pena señalar que este problema es esencialmente el mismo que el problema de memoria compartida. (Si usamos los mensajes GET y SET para interactuar con un proceso, esencialmente hemos creado alguna memoria compartida). Otro blogger compares ets to shared memory también. Sin embargo, siempre que comprenda dónde ha introducido construcciones similares a la memoria compartida y regule el acceso a esa memoria compartida, no debería tener ningún problema de subprocesamiento (que no sea un interbloqueo, por supuesto).
+1 exactamente –
Pero necesitas "seguridad en el proceso" :) –