Описание тега volatile

Volatile - это квалификатор, используемый для определения области хранения данных (объекта, поля, переменной, параметра), которая "может изменяться сама по себе", таким образом запрещая некоторые оптимизации генератора кода. В некоторых, но не во всех языках, которые распознают этот квалификатор, доступ к таким данным является потокобезопасным.

Изменчивые данные являются потокобезопасными в

  • C#
  • Java (5 и выше)
  • Scala (в зависимости от версии ВМ)

Компиляторы обеспечивают такую ​​семантику, выдавая инструкции барьера памяти в необходимом порядке.

Неустойчивые данные не являются потокобезопасными в некоторых реализациях

  • C
  • C++
  • Джава

В этих языках от компиляторов требуется только воздерживаться от определенных оптимизаций кода, особенно тех, которые удаляют или изменяют порядок доступа к изменчивым данным. Это все еще полезно для некоторых специализированных целей:

  • Доступ к устройствам с отображением памяти
  • Укрощение нетипичных библиотечных конструкций, таких как longjmp.
  • Некоторые очень осторожные протоколы синхронизации потоков

(Нет никакой связи между энергозависимыми данными и энергонезависимой памятью.)

Ссылки