ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
3 июля
577471 Топик полностью
fk0, легенда (04.02.2015 12:27, просмотров: 179) ответил SciFi на volatile тут вообще ни с какого бока. Кстати, видел у компиляторов ключики, запрещающие LDM, STM. Ну и по большому счёту компилятор никому не обещает, что не разобьёт доступ к объекту на несколько инструкций. Гарантировать может только ассемблер.
Компилятор так же не обещает, что он не закеширует объект в регистрах, что он не будет считывать из памяти два раза подряд и ещё всякое странное. Для компилятора лишь главное -- чтоб результат вычислений на выходе сходился с ожиданиями программиста. Так что рассуждения об не атомарности -- бред сивой кобылы. Нужна атомарность: используй мьютексы, критические секции, и т.п. Для переменной типа флаг (которая просто проверяется) можно использовать sig_atomic_t и его аналоги из C11 и т.п., но авторы компилятора наверняка забили на реализацию (адекватный тип определить в signal.h). Сделай typedef char atomic_t.
[ZX]