c++ - 为什么内存障碍取决于变量?

标签 c++

在对内存屏障/栅栏的总体目的进行了一些研究之后,(至少我认为),我对它们的用途有了基本的了解。在研究期间,我专注于C++的抽象,因为障碍似乎是特定于硬件的,而C++是一种低级的但通用的语言。但是,标准库对内存屏障的抽象的语义中有一个细节,使我质疑对它们的理解。

关于C++内存屏障memory_order_acq_reldocumentation声明(其他屏障也类似):

All writes in other threads that release the same atomic variable are visible before the modification and the modification is visible in other threads that acquire the same atomic variable.



在处理器级别(因为没有相应的硬件限制就不会存在此限制):如果所有先前的更改都受到影响,为什么对特定变量的说明很重要?例如,必须以任何一种方式刷新缓存,不是吗?这种方法的主要优势是什么?

先感谢您。

最佳答案

使用原子变量作为控制内存障碍的手段只是C++为您提供这种控制的一种方式。 (可能是最常用的方法,我可能会补充。)

您虽然不需要使用它们。

您可以调用诸如std::atomic_thread_fencestd::atomic_signal_fence之类的函数,这些函数无需任何关联变量即可实现内存屏障语义。

关于c++ - 为什么内存障碍取决于变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60119536/

相关文章:

c++ - 在 Visual Studio 之外运行的程​​序的行为有所不同

c++ - 错误 : expected primary-expression before ‘=’ token when using for loops

c++ - 在 C++11 中通过对 std::thread 的引用传递对象

c++ - 将节点旋转到 BST 的根

c++ - Boost ini_parser - 单例 DLL 问题

c++ - 如何在 C++ 17 中移动字符串的字母?

c++ - 警告 : dereferencing type-punned pointer will break strict-aliasing rules (even for void pointers)

c++ - namespace myspace { int x } 现在为什么 `myspace::x=3;` 会出错?

c++ - 类型的部分模板特化

c++ - 我的 std::lock 实现中的总线错误