pthreads v. ordenação de memória fraca SSE

As funções glibc pthread do Linux no x86_64 agem como cercas para acessos de memória com ordem fraca? (pthread_mutex_lock / unlock são as funções exatas em que estou interessado).

O SSE2 fornece algumas instruções com ordenação de memória fraca (armazenamentos não temporais, como movntps em particular). Se você estiver usando essas instruções e quiser garantir que outro segmento / núcleo veja uma ordem, entendo que você precisa de uma cerca explícita para isso, por exemplo, uma instrução sfence.

Normalmente, você espera que a API pthread atue como uma cerca adequadamente. No entanto, desconfio que o código C normal no x86 não gere acessos de memória com ordem fraca, por isso não tenho certeza de que pthreads precise atuar como uma barreira para acessos com ordem fraca.

Lendo o código-fonte glibc pthread, no final, um mutex é implementado usando "lock cmpxchgl", pelo menos no caminho não planejado. Então, acho que o que preciso saber é que essa instrução funciona como uma barreira para acessos com ordem fraca do SSE2?

questionAnswers(1)

yourAnswerToTheQuestion