ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
843533 Топик полностью
Николай Коровин (26.05.2018 00:25, просмотров: 124) ответил fk0 на Уже миллион раз обсуждали, не хочется повторяться. volatile и memory barrier -- оба нужны, у них разный ортогональный смысл. Компилятор имеет право всё переупорядочить, в память не писать, а кешировать в регистрах, и вообще вытворять всё что
Про компилёр я и не спрашивал, это просто по привычке с темы съехали (именно что миллион раз). Я про mfence, lfence и sfence. Ну, и про префикс lock. Инструкции, да. Компилёр -- чёрт с ним. Допустим, я на асме написал. Да и вообще,
например, пишешь в volatile, чтоб обработчик прерывания понял, и потом только меняешь в глобальном буфере что-то. А компилятор генерирует тебе код, когда он вначале меняет в буфере (порядок разный), а запись в volatile вообще выносит в конец функции перед выходом
насколько я помню, два volatile он переставить не может, так что если важен порядок, просто надо объявить всех участников оргии как volatile. Но всё равно речь не о таких барьерах. У меня там 2 mov, спецификация Intel гарантирует атомарность. Когда могут потребоваться именно что инструкции? Чтобы камень не наконвейерил чего не надо?