- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用显式内存栅栏是什么意思?
最佳答案
为了提高性能,现代 CPU 通常会乱序执行指令,以最大限度地利用可用芯片(包括内存读/写)。由于硬件强制执行指令完整性,因此您在单个执行线程中永远不会注意到这一点。然而,对于多线程或具有 volatile 内存的环境(例如内存映射 I/O),这可能会导致不可预测的行为。
内存栅栏/屏障是一类指令,意味着内存读/写按照您期望的顺序发生。例如,“完整栅栏”意味着栅栏之前的所有读/写都在栅栏之后的读/写之前提交。
注意内存栅栏是一个硬件概念。在高级语言中,我们习惯于处理互斥体和信号量 - 这些很可能使用低级内存栅栏来实现,并且不需要显式使用内存屏障。使用内存屏障需要仔细研究硬件架构,并且在设备驱动程序中比应用程序代码更常见。
CPU 重新排序与编译器优化不同 - 尽管结果可能相似。如果这可能导致不良行为(例如在 C 中使用 volatile 关键字),您需要采取单独的措施来阻止编译器对指令重新排序。
关于concurrency - 什么是内存栅栏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/286629/
我有一个栅栏的 3D 模型。该模型包含 1 个起始柱和 1 个末端柱,中间有一个连接玻璃板。假设我希望能够指定任意长度的栅栏,并将其放置在虚拟世界中。如果可能的话,我将如何处理原始 3D 模型以将其更
x86指令lfence/sfence/mfence用于实现Linux内核中的rmb()/wmb()/mb()机制。很容易理解,这些用于序列化内存访问。但是,在遇到运行时行为中的错误之前,在编写代码时确
以下代码实现了一些无锁(且无原子!)的线程间通信,这些通信需要使用存储和加载内存屏障,但是C++ 11 release-acquire语义不适当,也不保证正确性。实际上,该算法暴露了对发布获取语义的某
我是一名优秀的程序员,十分优秀!