2008-09-26 5 views
3

"Dirty reads", qui signifie lire la valeur d'un objet même s'il est verrouillé par un autre thread, described sur le site de Terracotta, mais j'ai entendu dire qu'ils ne devraient pas être utilisés, même si vous ne vous souciez pas de la possibilité que vous obteniez des données anciennes lorsque vous lisiez l'objet verrouillé.Les "lectures sales" sont-elles sûres à utiliser dans Terracotta?

Quelqu'un a-t-il une expérience quelconque de l'utilisation de lectures sales dans Terracotta et est-il sûr à utiliser si vous ne vous souciez pas de la possibilité de lire une ancienne valeur?

Répondre

3

Une lecture incorrecte est une lecture incorrecte. Terracotta, en cours de distribution/en cluster, ajoute seulement la possibilité de lire des valeurs encore plus anciennes de l'état mutable partagé auquel vous accédez sans synchronisation correcte.

Vous devez noter que, sous le modèle de mémoire dans Java 5, vous n'êtes pas garanti jamais lire une valeur mise à jour si vous n'utilisez pas la synchronisation appropriée. Terracotta peut décider de profiter de cette possibilité. En fait, toute JVM peut, à loisir, en profiter. Même si cela peut fonctionner sur votre machine, cela peut casser sur d'autres machines. Il peut casser des mises à jour mineures de la JVM, et il peut casser pour la même version de la même JVM sur un CPU différent. Dans cet esprit, vous pouvez dire que les lectures corrompues ne sont pas sécurisées dans une JVM ... À moins que cela ne vous dérange pas que vous ne puissiez plus lire les mises à jour effectuées par d'autres threads - une situation improbable, mais cela pourrait arriver. En outre, lorsque vous suivez votre lien vers le wiki de Terracottas, il est dit que l'article a été supprimé et que le motif est déconseillé.

+0

Oui, il a été retiré suite à ma conversation avec un ingénieur commercial Terracotta. – sanity

1

Je suis un développeur Terracotta. L'essentiel de la réponse est déjà noté par Christian Vest Hansen - tout comme la JVM ne donne aucune garantie quant à la visibilité des mises à jour d'un objet partagé auquel on accède sans une synchronisation correcte, Terracotta ne peut pas non plus garantir des lectures erronées. objet groupé.

Le lien a en effet été volontairement supprimé et remplacé par un avertissement pour ne pas utiliser ce motif.

Questions connexes