ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
842895 Топик полностью
lloyd (23.05.2018 19:45, просмотров: 115) ответил Николай Коровин на Неееее, я именно про барьерные инструкции проца в их аппаратном смысле. С компилятором действительно договориться проще, volatile, char*... Проблема именно в том, что инфа о том, когда сам камень может переставить команды -- весьма противоречива.
Тут как раз все просто - если переменная не volatile, нет барьеров памяти и прочего - то перестановка (и даже само выполнение) операций - лишь вопрос времени. У gcc-подобных компиляторов доступ к volatile переменной не будет оптимизироваться по OOE, что, однако, вовсе не гарантирует атомарности операции: то, что мы перезаписали переменную в кеше данных не значит, что второе ядро, вычитав переменную, получит новое значение. А у процессоров проще - тут уже сильно зависит от архитектуры проца, но если есть кеш данных, то иногда явно нужно пинать контроллер кеша, что данные следует обновить (выгрузить в ОЗУ или наоборот).