Linux的glibc pthread函数在x86_64上是否作为弱序内存访问的栅栏呢?(我感兴趣的确切函数是pthread_mutex_lock/unlock)。
SSE2提供了一些具有弱内存排序的指令(特别是非临时存储,如movntps)。如果您使用这些指令并希望保证另一个线程/核心看到顺序,则需要显式地进行栅栏操作,例如sfence指令。
通常情况下,您期望pthread API适当地作为栅栏。但是,我怀疑x86上的普通C代码不会生成弱序内存访问,因此我不确定pthread是否需要作为弱序访问的栅栏。
通过阅读glibc pthread源代码,mutex最终是使用“lock cmpxchgl”实现的,至少在未竞争的路径上是如此。所以我猜想我需要知道的是该指令是否对SSE2的弱序访问起到了栅栏的作用?
我不确定失败是因为互斥锁是栅栏还是我只是幸运。我的测试代码在https://gist.github.com/rcls/c855e3e782253e58e046 - user1998586