me preguntaba si existe alguna forma "fácil" de actualizar las colecciones de scala inmutables de forma segura. Considere el siguiente código:Actualizando las colecciones de Scala de forma segura
class a {
private var x = Map[Int,Int]()
def update(p:(Int,Int)) { x = x + (p) }
}
Este código no es seguro para subprocesos, ¿correcto? Con esto quiero decir que si tenemos dos hilos invocando el método de actualización y digamos que x es un mapa que contiene {1 => 2} y el hilo A invoca la actualización ((3,4)) y solo logra ejecutar el x + (p) parte del código. Luego ocurre la reprogramación y el hilo B invoca la actualización ((13, 37)) y actualiza con éxito la variable x. El hilo A continúa y termina.
Después de todo esto, el valor x equivaldría a un mapa que contenga {1 => 2, 3 => 4}, ¿correcto? En lugar de deseado {1 => 2, 3 => 4, 13 => 37}. ¿Hay una manera simple de arreglar eso? Espero que no se pueda entender lo que estoy preguntando :)
Btw, sé que hay soluciones como Akka STM, pero preferiría no utilizarlas, a menos que sea necesario.
¡Muchas gracias por cualquier respuesta!
editar: Además, preferiría una solución sin bloqueo. Eeeew :)
uso Akka STM http://akka.io/docs/akka/1.1.3/ scala/stm.html – Phil
+! para Eeeew! : D – Daniel