【发布时间】:2013-07-27 17:08:42
【问题描述】:
我正在阅读关于 volatile 关键字的这个问题的答案:
https://stackoverflow.com/a/2485177/997112
这个人说:
防止重新排序的解决方案是使用内存屏障, 这向编译器和 CPU 表明没有内存访问 可以在这一点上重新排序。在我们周围设置这样的障碍 易失性变量访问确保即使是非易失性访问也不会 在 volatile 中重新排序,允许我们编写线程安全的 代码。
但是,内存屏障也确保所有挂起的读/写 当到达障碍时执行,所以它有效地给了我们 我们自己需要的一切,使 volatile 变得不必要。我们只能 完全删除 volatile 限定符。
这个“内存屏障”是如何在 C++ 中实现的?
编辑:
谁能给出一个简单的代码示例?
【问题讨论】:
-
@HansPassant 在您链接到的问题中没有简单的 C++ 内存屏障示例
-
谁保证会很简单?这是C++,应该很难。如果不是,那么任何人都可能是 C++ 程序员 :) 至少问题标题中的“内存屏障”一词应该暗示这是完全相同的问题。
标签: c++ multithreading volatile memory-barriers