Почему volatile не считается полезным в многопоточном программировании на C или c++?



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



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



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



как и где я ошибаюсь?

686   0  

Comments

    Ничего не найдено.