Согласно примеру и объяснению здесь, все должно быть хорошо.
(Модераторам: пожалуйста, прекратите удалять эту ссылку, это официальная документация Microsoft по такому поведению и полезна для всех, кто пытается найти настоящий источник. Вы действительно хотите, чтобы я скопировал и вставил сюда весь раздел? Я попробовал опубликовать свой ответ, он тоже был удален. стоп.)
Просто простой пример. Нет необходимости объяснять lock, Interlocked и т. д.
Bool сигнализирует, доступно ли значение для состояния. состояние и логическое значение впоследствии не изменяется.
Код: Выделить всё
int state;
volatile bool stateAvailable;
Thread A:
while(!stateAvailable) { sleep }
read state
Thread B:
state = 5;
stateAvailable = true;
- Будет ли энергозависимая запись гарантировать, что предыдущие операции будут выполнены, а энергозависимое чтение обеспечит что последующие операции не будут выполняться, тем самым также синхронизируя состояние процессора?
- Или изменчивая запись/чтение только будет гарантировать, что компилятор не оптимизирует проверку bool из Thread A, и это не оказывает никакого влияния на возможно устаревшее значение штат?
Подробнее здесь: https://stackoverflow.com/questions/756 ... rby-fields
Мобильная версия