我正在阅读有关 volatile 关键字的问题的答案:
https://stackoverflow.com/a/2485177/997112 https://stackoverflow.com/a/2485177/997112
该人说:
防止重新排序的解决方案是使用内存屏障,
这向编译器和 CPU 表明没有内存访问
可能会在这一点上重新排序。在我们周围设置这样的障碍
易失性变量访问确保即使是非易失性访问也不会
跨易失性重新排序,允许我们编写线程安全的
代码。
然而,内存屏障还确保所有挂起的读/写都被
当达到障碍时执行,所以它有效地给了我们
我们所需要的一切都由其自身完成,使得 volatility 变得不必要。我们只能
完全删除 volatile 限定符。
这个“内存屏障”在C++中是如何实现的呢?
EDIT:
有人可以给出一个简单的代码示例吗?
内存屏障在 C++11 中使用起来很简单:
std::atomic<int> i;
所有访问i
将受到内存屏障的保护。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)