Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
while(bla_bla){
do_something_1();
asm("mfence"); // так ставить барьер неправильно!
do_something_2();
}
while(bla_bla){
do_something_1();
asm volatime("mfence":::"memory"); // А вот так правильно!
do_something_2();
}
Верно ли, что data dependency барьер это оптимизированный вариант барьера на чтение? Действует не на все операции чтения, а только на те из них, которые вместе с какой-нибудь другой инструкцией после барьера формирует зависимость по данным?
Резонный вопрос — как «глубоко» железо способно отследить зависимость (грубо говоря пусть N — «расстояние» в инструкциях между начальной и конечной инструкциями, связанных зависимостью; как велико N)?
Просится мысль вставить в spin_lock и spin_unlock барьеры
Барьеры доступа к памяти в Linux