Why is volatile not considered useful in multithreaded C or C++ programming?

Как показано вэтот ответ Я недавно написал, я, кажется, запутался насчет полезности (или ее отсутствия)volatile в многопоточных контекстах программирования.

Мое понимание таково: в любое время, когда переменная может быть изменена вне потока контроля фрагмента кода, обращающегося к ней, эта переменная должна быть объявлена ​​какvolatile, Обработчики сигналов, регистры ввода / вывода и переменные, измененные другим потоком, представляют собой такие ситуации.

Итак, если у вас есть глобальный Intfoo, а такжеfoo читается одним потоком и атомарно устанавливается другим потоком (возможно, с использованием соответствующей машинной инструкции), поток чтения видит эту ситуацию так же, как он видит переменную, настроенную обработчиком сигнала или измененную внешним аппаратным условием и, таким образом,foo должен быть объявленvolatile (или, для многопоточных ситуаций, доступ к которым осуществляется с помощью нагрузки на память, что, вероятно, является лучшим решением).

Как и где я не прав?

Ответы на вопрос(9)

Ваш ответ на вопрос