Если читать горячо любимый msdn можно найти следующую формулировку:
Ключевое слово volatile указывает, что поле может быть изменено несколькими потоками, выполняющимися одновременно. Поля, объявленные как volatile, не проходят оптимизацию компилятором, которая предусматривает доступ посредством отдельного потока. Это гарантирует наличие наиболее актуального значения в поле в любое время.
А также на стороннем ресурсе есть такая :
Согласно MSDN ключевое слово volatile указывает, что поле может быть изменено несколькими потоками, выполняющимися одновременно и поэтому JIT компилятор не будет производить оптимизации с полем
Поправьте, если что пожалуйста, ибо я немного запутался, моя логика следующая : я могу прямо не знать что значение поля модифицируется, когда значение реально модифицируется и из разных потоков. Я говорю компилятору что мне необходимо читать поле не из кеша, ибо из кеша может попасть не валидное значение, а читать прямо из области где она лежит, что дает мне право в любой момент времени, независимо от того менялось оно или не менялось, получать действительно верное значение поля.
Ну, в общем, правильно. Всё, что помечено как volatile, читается/пишется оттуда/туда, где реально находится, без кеширования, например, в регистрах, если это, конечно, возможно.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня есть две коллекции, которые нужно вывести в одном циклеКак мне лучше всего это реализовать? Можно ли использовать foreach или нет?