Является ли volatile вообще полезным в однопоточном приложении на C #?

Есть ли случай, в котором volatile может быть полезен в контексте однопоточного программирования? Я знаю, что он используется, чтобы убедиться, что значение переменной всегда действительно проверяется в памяти, поэтому есть ли случай, когда это значение может измениться (в приложении ST) так, что приложение / компилятор не заметит?


person NPS    schedule 04.02.2016    source источник
comment
Не уверен насчет C #, но C volatile полезен даже в однопоточных приложениях для обозначения того, что конкретная область памяти (переменная) может быть доступна извне (например, через оборудование) и что она не должна кэшироваться в ЦП. Не уверен, что это переводится на C #.   -  person Qix - MONICA WAS MISTREATED    schedule 04.02.2016
comment
Это бесполезно в однопоточных приложениях, и этого следует избегать в многопоточных приложениях. Вместо этого вы должны использовать блокировки, барьеры памяти или Volatile.Read (), Volatile.Write (). Вот статья Эрика Липперта, в которой он резюмирует: Я не рекомендую вам когда-либо создавать изменчивое поле.. А Джо Даффи называет изменчивое Зло ...   -  person Matthew Watson    schedule 04.02.2016
comment
Я совсем в этом не уверен. мы не рассматриваем многообработанное приложение, в котором IntPtr может не быть изменчивым, но оно может указывать на массив байтов, который представляет собой указатель, и это значение может быть изменено. что-то вроде int ** ptr = & ptr, версия C #, где ptr может быть изменен из другого процесса   -  person David Haim    schedule 04.02.2016


Ответы (1)


Нет, в этом нет необходимости. Он используется для синхронизации содержимого памяти между потоками, что, если у вас только один, не имеет смысла.

person Zbynek Vyskovsky - kvr000    schedule 04.02.2016