Безопасно ли использовать “грязные считыватели” в терракоте?

StackOverflow https://stackoverflow.com/questions/141090

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top