Безопасны ли «грязные чтения» в Терракоте? - PullRequest
3 голосов
/ 26 сентября 2008

«Грязные чтения», означающие чтение значения объекта, даже если он заблокирован от записи другим потоком, описаны на веб-сайте Terracotta, но я слышал, что их не следует использовать, даже если если вас не волнует вероятность того, что вы можете получить старые данные при грязном чтении заблокированного объекта.

Есть ли у кого-нибудь опыт использования грязного чтения в Терракоте, и безопасны ли они для использования, если вас не волнует возможность чтения старого значения?

Ответы [ 2 ]

3 голосов
/ 27 сентября 2008

Грязное чтение - это грязное чтение. Распределенная / кластеризованная терракота только добавляет возможность считывать даже более старые значения общего изменяемого состояния, к которому вы обращаетесь, без надлежащей синхронизации.

Следует отметить, что при модели памяти в Java 5 вам не гарантируется когда-либо чтение обновленного значения, если вы не используете правильную синхронизацию. Терракота может решить воспользоваться этой возможностью. Фактически, любая JVM может на досуге воспользоваться этим. Даже если он может работать на вашей машине, он может сломаться на других машинах. Может произойти сбой при незначительных обновлениях JVM и может произойти сбой для одной и той же версии той же JVM на другом процессоре.

Имея это в виду, вы можете сказать, что грязное чтение не безопасно в любой JVM ... Если вы не возражаете против возможности того, что вы никогда не сможете прочитать обновления, которые делают другие потоки - маловероятная ситуация, но это может произойти.

Кроме того, когда вы действительно переходите по своей ссылке на Terracottas wiki, он говорит, что статья была удалена и шаблон не рекомендуется.

1 голос
/ 27 сентября 2008

Я разработчик терракоты. Суть ответа так же, как уже отмечал Кристиан Вест Хансен - точно так же, как JVM не дает никаких гарантий относительно видимости обновлений общего объекта, к которому осуществляется доступ без надлежащей синхронизации, Terracotta также не может дать никаких гарантий относительно грязного чтения кластерный объект.

Ссылка действительно была преднамеренно удалена и заменена предупреждением, чтобы не использовать этот шаблон.

...