@MichaelBarker: Окей, для довольных блокировок я понимаю это.

прочтенияПоваренная книга JSR-133 для авторов компиляторов о реализации volatile, особенно в разделе «Взаимодействие с атомарными инструкциями». Я предполагаю, что для чтения изменчивой переменной без ее обновления необходим барьер LoadLoad или LoadStore. Далее по странице я вижу, что LoadLoad и LoadStore фактически не работают на процессорах X86. Означает ли это, что операции чтения volatile могут выполняться без явного аннулирования кэша на x86, и это так же быстро, как обычное чтение переменных (не учитывая ограничения на изменение порядка volatile)?

Я считаю, что я не понимаю это правильно. Может кто-то хочет просветить меня?

РЕДАКТИРОВАТЬ: Интересно, есть ли различия в многопроцессорных средах. В однопроцессорных системах ЦП может смотреть на свои собственные кэши потоков, как утверждает Джон В., но в многопроцессорных системах должна быть некоторая опция конфигурации для ЦП, что этого недостаточно, и необходимо задействовать основную память, делая энергозависимую медленнее в системах с несколькими процессорами, верно?

PS: На своем пути, чтобы узнать больше об этом, я наткнулся на следующие замечательные статьи, и, поскольку этот вопрос может быть интересен для других, я поделюсь своими ссылками здесь:

Теория и практика Java: исправление модели памяти Java, часть 1 а такжеТеория и практика Java: исправление модели памяти Java, часть 2

Ответы на вопрос(4)

Ваш ответ на вопрос