Некоторые языки предоставляют модификатор volatile
, который описывается как выполняющий "барьер памяти чтения" перед чтением памяти, которая поддерживает переменную.
Зарезервированный барьер памяти обычно описывается как способ гарантировать, что ЦП выполнил считывание, запрошенное перед барьером, прежде чем он выполнит чтение, запрошенное после барьера. Однако, используя это определение, казалось бы, что устаревшее значение все еще можно прочитать. Другими словами, выполнение чтения в определенном порядке, по-видимому, не означает, что необходимо проконсультироваться с основной памятью или другими процессорами, чтобы убедиться, что последующие значения считаются действительно отраженными последними в системе во время считывания барьера или записываются впоследствии после читать барьер.
Итак, действительно ли volatile действительно гарантирует, что обновленное значение будет считано или просто (gasp!), что считанные значения, по крайней мере, настолько же актуальны, как и перед барьером? Или какая-то другая интерпретация? Каковы практические последствия этого ответа?