首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何决定何时使用内存屏障

如何决定何时使用内存屏障
EN

Stack Overflow用户
提问于 2015-07-06 18:15:51
回答 1查看 908关注 0票数 0

作为编写驱动程序代码的一部分,我遇到了使用内存屏障(栅栏)的代码。在通过Google阅读和浏览之后,了解了为什么它在SMP中被使用和帮助。考虑到这一点,在多线程编程中,我们会发现许多存在内存竞争的实例,而在所有地方设置障碍将花费系统CPU。我想知道如何:

  1. 我知道使用公共内存访问数据的特定代码路径,在所有这些地方都需要内存屏障吗?
  2. 有什么具体的技巧或技巧可以帮我找出这个陷阱吗?

这是非常普遍的问题,但想要了解其他人的经验和任何提示,以帮助确定这些陷阱。

EN

回答 1

Stack Overflow用户

发布于 2015-07-14 04:23:05

通常,设备硬件对写入设备寄存器的顺序非常敏感。现代系统是弱耦合的,通常在CPU和内存之间有写组合的硬件.

假设您编写了一个32位对象的单个字节。写组合硬件现在是A__ _.硬件没有立即启动读/修改/写周期来更新A字节,而是设置了一个定时器。希望CPU在计时器过期之前发送B、C和D字节。计时器过期,写入组合寄存器中的数据被转储到内存中.

设置障碍会导致写组合硬件使用它所拥有的。如果只有插槽A被占用,那么只有插槽A才会被写入。

现在假设硬件期望字节按照严格的顺序A,C,B,D写,如果不采取预防措施,硬件寄存器就会按错误的顺序写入。结果就是你所期望的:准备好了!火!瞄准!

应谨慎地设置障碍,因为不正确的使用会严重妨碍业绩。并不是每一种设备的写入都需要一个障碍,需要判断。

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

https://stackoverflow.com/questions/31252849

复制
相关文章

相似问题

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