Я понимаю, что std:: mutex lock и unlock имеют семантику получения/выпуска, которая предотвращает перемещение инструкций между ними.
Таким образом, для получения/выпуска следует отключить инструкции компилятора и процессора.
Мой вопрос в том, что я смотрю на базу кода GCC5.1 и не вижу ничего особенного в std:: mutex:: lock/unlock, чтобы предотвратить коды переупорядочения компилятора.
Я нахожу потенциальный ответ в does-pthread-mutex-lock-have-happens-before-semantics, который указывает mail, который говорит, что вызов внешней функции действует как забор памяти компилятора.
Всегда ли это так? А где стандарт?