Применение и значение ключевого слова volatile

276
23 февраля 2017, 23:20

Если читать горячо любимый msdn можно найти следующую формулировку:

Ключевое слово volatile указывает, что поле может быть изменено несколькими потоками, выполняющимися одновременно. Поля, объявленные как volatile, не проходят оптимизацию компилятором, которая предусматривает доступ посредством отдельного потока. Это гарантирует наличие наиболее актуального значения в поле в любое время.

А также на стороннем ресурсе есть такая :

Согласно MSDN ключевое слово volatile указывает, что поле может быть изменено несколькими потоками, выполняющимися одновременно и поэтому JIT компилятор не будет производить оптимизации с полем

Поправьте, если что пожалуйста, ибо я немного запутался, моя логика следующая : я могу прямо не знать что значение поля модифицируется, когда значение реально модифицируется и из разных потоков. Я говорю компилятору что мне необходимо читать поле не из кеша, ибо из кеша может попасть не валидное значение, а читать прямо из области где она лежит, что дает мне право в любой момент времени, независимо от того менялось оно или не менялось, получать действительно верное значение поля.

Answer 1

Ну, в общем, правильно. Всё, что помечено как volatile, читается/пишется оттуда/туда, где реально находится, без кеширования, например, в регистрах, если это, конечно, возможно.

READ ALSO
Вывод с двух коллекций одновременно

Вывод с двух коллекций одновременно

У меня есть две коллекции, которые нужно вывести в одном циклеКак мне лучше всего это реализовать? Можно ли использовать foreach или нет?

257
Ajax запрос в контролеру

Ajax запрос в контролеру

привет есть запрос

302
Шаблонные классы и функции

Шаблонные классы и функции

Предположим, имеется следующая структура классов:

251