首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程诉SSE弱内存排序

问线程诉SSE弱内存排序
EN

Stack Overflow用户
提问于 2014-06-15 20:45:01
回答 1查看 378关注 0票数 9

x86_64上的Linux线程函数是否用作弱有序内存访问的栅栏?(p线程_mutex_lock/unlock正是我感兴趣的函数)。

SSE2提供了一些具有弱内存排序的指令(特别是非时态存储,例如movntps )。如果您正在使用这些指令,并且想要保证另一个线程/核心能够看到排序,那么我知道您需要一个明确的栅栏来完成这个操作,例如,一个sfence指令。

通常,您确实希望pthread能够适当地充当栅栏。但是,我怀疑x86上的普通C代码不会生成弱有序的内存访问,所以我不相信p线程需要充当弱有序访问的围栏。

通过阅读glibc线程源代码,最终使用"lock cmpxchgl“实现互斥,至少在非竞争路径上是这样。因此,我猜想我需要知道的是,该指令是否充当了SSE2弱有序访问的围栏?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-08 16:30:24

非时态存储需要正确地排序sfence指令。

然而,简单互斥体的有效用户级实现假设它是由一个简单的写释放出来的,这并不意味着写缓冲区会被刷新,而像lock cmpxchg这样的原子读-修改-写操作则意味着完全的内存隔离。

因此,当unlock没有将store-with-release语义应用于非时态存储时,您会遇到这样的情况。因此,这些SSE存储可以在解锁之后和另一个线程获得互斥之后重新排序。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24233959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档