作为编写驱动程序代码的一部分,我遇到了使用内存屏障(栅栏)的代码。在通过Google阅读和浏览之后,了解了为什么它在SMP中被使用和帮助。考虑到这一点,在多线程编程中,我们会发现许多存在内存竞争的实例,而在所有地方设置障碍将花费系统CPU。我想知道如何:
这是非常普遍的问题,但想要了解其他人的经验和任何提示,以帮助确定这些陷阱。
发布于 2015-07-14 04:23:05
通常,设备硬件对写入设备寄存器的顺序非常敏感。现代系统是弱耦合的,通常在CPU和内存之间有写组合的硬件.
假设您编写了一个32位对象的单个字节。写组合硬件现在是A__ _.硬件没有立即启动读/修改/写周期来更新A字节,而是设置了一个定时器。希望CPU在计时器过期之前发送B、C和D字节。计时器过期,写入组合寄存器中的数据被转储到内存中.
设置障碍会导致写组合硬件使用它所拥有的。如果只有插槽A被占用,那么只有插槽A才会被写入。
现在假设硬件期望字节按照严格的顺序A,C,B,D写,如果不采取预防措施,硬件寄存器就会按错误的顺序写入。结果就是你所期望的:准备好了!火!瞄准!
应谨慎地设置障碍,因为不正确的使用会严重妨碍业绩。并不是每一种设备的写入都需要一个障碍,需要判断。
https://stackoverflow.com/questions/31252849
复制相似问题