Выполняют ли функции glibc pthread Linux на x86_64 как ограждения для слабо упорядоченных обращений к памяти? (pthread_mutex_lock/unlock - это точные функции, которые меня интересуют).
SSE2 предоставляет некоторые инструкции со слабым упорядочением памяти (не временные хранилища, такие как movntps, в частности). Если вы используете эти инструкции и хотите гарантировать, что другой поток/ядро видит порядок, тогда я понимаю, что для этого требуется явный забор, например, инструкция sfence.
Обычно вы ожидаете, что API pthread будет действовать как забор соответствующим образом. Тем не менее, я подозреваю, что обычный C-код на x86 не будет генерировать слабо упорядоченные обращения к памяти, поэтому я не уверен, что pthreads должен действовать как забор для слабо упорядоченных обращений.
Чтение через исходный код glibc pthread, мьютекс в конце реализован с использованием "lock cmpxchgl", по крайней мере, на бесконтактном пути. Поэтому я предполагаю, что мне нужно знать, что эта инструкция действует как забор для слабо упорядоченных доступов SSE2?