首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中的内存障碍有哪些示例?

C++中的内存障碍有哪些示例?
EN

Stack Overflow用户
提问于 2012-07-29 21:47:15
回答 2查看 805关注 0票数 10

我发现C++11互斥锁不是void lock() volatile。编译器如何知道哪些函数是内存屏障,哪些不是?是否所有的函数都有障碍,即使它们不是易失性的?有哪些不太为人所知的记忆障碍和每个人都应该知道的记忆障碍?

EN

回答 2

Stack Overflow用户

发布于 2012-07-29 21:58:01

运行时库必须以某种方式实现互斥锁,以便编译器知道!语言标准并没有说明如何做到这一点。

很可能,它涉及到对某些操作系统服务的调用,而这些服务充当了内存屏障。或者编译器可以有一个扩展名,比如void _ReadWriteBarrier();

票数 5
EN

Stack Overflow用户

发布于 2012-07-29 22:19:50

您的锁的实际实现将是这样的:编译器不会执行非法的重新排序,不会省略变量加载,并且它将确保以原子方式访问std::mutex变量,并且CPU执行必要的内存屏障以获取和释放锁。

需要做多少工作才能确保这一点的细节因平台而异,但您的库实现将做正确的事情。

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

https://stackoverflow.com/questions/11709736

复制
相关文章

相似问题

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