pthreads v. SSE слабое упорядочение памяти

Работают ли функции Linux glibc pthread на x86_64 в качестве ограждений для слабо упорядоченного доступа к памяти? (pthread_mutex_lock / unlock - это именно те функции, которые меня интересуют).

SSE2 предоставляет некоторые инструкции со слабым упорядочением памяти (в частности, временные хранилища, такие как movntps). Если вы используете эти инструкции и хотите гарантировать, что другой поток / ядро ​​увидит порядок, то я понимаю, что вам нужен явный забор для этого, например, инструкция sfence.

Обычно вы ожидаете, что API-интерфейс pthread будет действовать как ограждение надлежащим образом. Тем не менее, я подозреваю, что обычный код C на x86 не будет генерировать слабо упорядоченные обращения к памяти, поэтому я не уверен, что pthreads должен выступать в качестве ограничения для слабо упорядоченных обращений.

Считывая исходный код glibc pthread, мьютекс, в конце концов, реализуется с использованием «lock cmpxchgl», по крайней мере, по неконтролируемому пути. Итак, я предполагаю, что мне нужно знать, действует ли эта инструкция как ограничитель для слабо упорядоченных доступов SSE2?

Ответы на вопрос(1)

Ваш ответ на вопрос