C“记忆屏障”的例子

新手上路,请多包涵

我正在阅读关于 volatile 关键字的这个问题的答案:

https://stackoverflow.com/a/2485177/997112

该人说:

防止重新排序的解决方案是使用内存屏障,它向编译器和 CPU 都表明,在这一点上不能对内存访问进行重新排序。在我们的 volatile 变量访问周围放置这样的障碍可以确保即使是非 volatile 访问也不会在 volatile 中重新排序,从而允许我们编写线程安全的代码。

但是,内存屏障还确保在达到屏障时执行所有挂起的读/写操作,因此它有效地为我们提供了我们需要的一切,从而使 volatile 变得不必要。我们可以完全删除 volatile 限定符。

这个“内存屏障”是如何在 C++ 中实现的?

编辑:

有人可以给出一个简单的代码示例吗?

原文由 user997112 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 689
1 个回答

在 C++11 中使用内存屏障很简单:

 std::atomic<int> i;

所有对 i 的访问都将受到内存屏障的保护。

原文由 Pete Becker 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题