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