Изменчивый Нарушает свою основную работу?

Согласно MSDN:

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

Обратите внимание на последнее предложение:

Это гарантирует, что самое актуальное значение всегда присутствует в поле.

Однако с этим ключевым словом возникла проблема.

Ячитал , что он может менять порядок инструкций:

Первая инструкция Вторая инструкция Можно ли их поменять местами?
Читать Читать Нет
Читать Написать Нет
Написать Написать Нет
Написать Прочитать Да! 

Это означает, что Джон присваивает значение изменчивому полю, а позжеПол хочет прочитать это поле, Пол получает староезначение!

Что здесь происходит? Разве это не основная работа?

Я знаю, что есть и другие решения, но мой вопрос касается ключевого слова volatile.

Должен ли я (как программист) запрещать использование этого ключевого слова из-за такого странного поведения?

23
задан Royi Namir 1 March 2013 в 21:16
поделиться