Согласно MSDN:
Ключевое слово volatile указывает, что поле может быть изменено несколько потоков, которые выполняются в одно и то же время. Поля, которые объявленные volatile не подпадают под оптимизацию компилятора, что допускать доступ одним потоком. Это гарантирует, что большинство актуальное значение всегда присутствует в поле.
Обратите внимание на последнее предложение:
Это гарантирует, что самое актуальное значение всегда присутствует в поле.
Однако существует проблема с этим ключевым словом.
Я прочитал, что он может изменить порядок инструкций:
First instruction Second instruction Can they be swapped? Read Read No Read Write No Write Write No Write Read Yes! <----
Это означает, что Джон устанавливает значение в поле volatile, а позже Пол хочет прочитать поле, Пол получает значение old!
Что здесь происходит? Разве это не главная работа?
Я знаю, что есть другие решения, но мой вопрос касается ключевого слова volatile.
Должен ли я (как программист) не использовать это ключевое слово - из-за такого странного поведения?