> Строя барьеры так, чтобы они точно помогали избавиться от реордеринга компилятором
не очень понятен вопрос, если речь про C/C++, то речь идёт о программировании виртуальной машины, и гарантии в барьерах атомиков распространяются на итоговый сгенерированный код
Имеется в виду код, кт в теории может соблюдать порядок проверки каких-то флагов, но не соблюдать порядок их инициализации относителтно друг друга. (Потому что они например в разных потоках инциализируются и оба получаются release). Условно говоря, они могут порождать ситуацию, когда f1 у одного процессора true, f2 - false, а у другого наоборот. Фиксится ли это самой системой (каким-нибудь умным протоколом)?