После прочтения Поваренной книги JSR-133 для авторов компиляторов о реализации volatile, особенно в разделе "Взаимодействие с атомарными инструкциями", я предполагаю, что для чтения изменяемой переменной без ее обновления необходим барьер LoadLoad или LoadStore. Далее по странице я вижу, что LoadLoad и LoadStore фактически не работают на процессорах X86. Означает ли это, что операции чтения volatile могут выполняться без явного аннулирования кэша на x86, и это так же быстро, как чтение обычной переменной (не учитывая ограничения на изменение порядка volatile)?
Я считаю, что я не понимаю это правильно. Может кто-то хочет просветить меня?
РЕДАКТИРОВАТЬ: Интересно, есть ли различия в многопроцессорных средах. В однопроцессорных системах ЦП может смотреть на свои собственные кэши потоков, как утверждает Джон В., но в многопроцессорных системах должна быть некоторая опция конфигурации для ЦПУ, что этого недостаточно, и необходимо задействовать основную память, делая энергозависимую медленнее в системах с несколькими процессорами, верно?
PS: На своем пути, чтобы узнать больше об этом, я наткнулся на следующие замечательные статьи, и, поскольку этот вопрос может быть интересен для других, я поделюсь своими ссылками здесь: