首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >围绕sem_post(sem_t * sem)和sem_wait(sem_t * sem)是否存在完整的内存屏障?

围绕sem_post(sem_t * sem)和sem_wait(sem_t * sem)是否存在完整的内存屏障?
EN

Stack Overflow用户
提问于 2013-05-08 10:24:45
回答 2查看 921关注 0票数 7

在linux代码中,我记得听说过围绕mutex_lock()有一个完整的内存屏障。我想确定它是否也在sem_xxx附近。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-08 10:29:25

是的,它在无争用的情况下使用原子递增/递减,当然它有一个内存栏。对于争用的情况,有一个对futex的系统调用,它也有一个内存栏。

票数 1
EN

Stack Overflow用户

发布于 2013-05-08 10:51:04

权威的答案是:

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_11

应用程序应确保限制多个控制线程(线程或进程)对任何内存位置的访问,以便当另一个控制线程可能正在修改某个内存位置时,任何控制线程都无法读取或修改该内存位置。使用同步线程执行以及相对于其他线程同步存储器的功能来限制这种访问。以下函数相对于其他线程同步内存:...

sem_waitsem_post都在列表中,所以它们是完全的内存屏障。

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

https://stackoverflow.com/questions/16431679

复制
相关文章

相似问题

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