¿Son seguras las "lecturas sucias" en Terracota?
-
02-07-2019 - |
Pregunta
" Lecturas sucias " ;, lo que significa leer el valor de un objeto a pesar de que está bloqueado por otro hilo, son descrito en el sitio web de Terracotta, sin embargo, he oído que no deberían usarse, incluso si no le importa la posibilidad de que pueda obtener datos antiguos cuando lees sucio el objeto bloqueado.
¿Alguien tiene alguna experiencia en el uso de lecturas sucias en terracota, y son seguros de usar si no le importa la posibilidad de leer un valor antiguo?
Solución
Una lectura sucia es una lectura sucia. La terracota, que se distribuye / agrupa, solo agrega la posibilidad de leer valores aún más antiguos del estado mutable compartido al que está accediendo sin la sincronización adecuada.
Debe tener en cuenta que, según el modelo de memoria en Java 5, no se garantiza que nunca lea un valor actualizado si no utiliza la sincronización adecuada. La terracota puede decidir aprovechar esta posibilidad. De hecho, cualquier JVM puede, a su gusto, aprovecharlo. Incluso si funciona en su máquina, puede romperse en otras máquinas. Puede romperse en actualizaciones menores de la JVM, y puede romperse para la misma versión de la misma JVM en una CPU diferente.
Con eso en mente, puede decir que las lecturas sucias no son seguras en ninguna JVM ... A menos que no le importe la posibilidad de que nunca podrá leer las actualizaciones que hacen otros hilos, un situación poco probable pero podría suceder.
Además, cuando realmente sigues tu enlace a la wiki de Terracottas, dice que el artículo ha sido eliminado y que el patrón se desaconseja.
Otros consejos
Soy un desarrollador de terracota. La esencia de la respuesta es tal como Christian Vest Hansen ya lo señaló: al igual que la JVM no garantiza la visibilidad de las actualizaciones de un objeto compartido al que se accede sin una sincronización adecuada, Terracotta tampoco puede garantizar la lectura sucia de un objeto agrupado.
De hecho, el enlace se ha eliminado y reemplazado a propósito con una advertencia para no usar este patrón.