x86_64 上的 Linux glibc pthread 函数是否充当弱排序内存访问的围栏?(pthread_mutex_lock/unlock 是我感兴趣的确切功能)。
SSE2 提供了一些具有弱内存排序的指令(特别是 movntps 等非临时存储)。如果您正在使用这些指令并希望保证另一个线程/核心看到一个排序,那么我知道您需要一个明确的栅栏,例如,一个 sfence 指令。
通常,您确实希望 pthread API 能够适当地充当围栏。但是,我怀疑 x86 上的普通 C 代码不会生成弱排序的内存访问,所以我不确定 pthreads 需要充当弱排序访问的围栏。
通读 glibc pthread 源代码,最终使用“lock cmpxchgl”实现互斥锁,至少在非竞争路径上是这样。所以我猜我需要知道的是该指令是否充当 SSE2 弱排序访问的屏障?