C++11引入了一个新的内存模型,它允许“运行”C++11代码的抽象机器有一个关于多线程的概念。它还引入了内存加载/存储操作所遵循的一组内存顺序。
C++20的维基百科页面上说
修正的记忆模型。
它给出的参考资料表明,C++11的内存模型存在许多缺陷,C++20将对其进行修正。
请有人举例说明C++11的内存模型所带来的问题,以及如何在C++20中解决这个问题?
相关问题:C++11内存模型简介
发布于 2020-07-10 22:56:17
正如@PeterM所暗示的,由于C++11内存模型的形式化后发现了事后发现的问题,它的“一个(主观)小变化”。
旧模型的定义是为了使不同的内存访问机制可以在公共体系结构上使用成本较高的硬件指令来实现。具体来说,memory_order_acquire和memory_order_release应该可以在ARM和Power架构上使用某种轻量级的栅栏指令来实现。不幸的是,事实证明,他们不能(!);这也是适用于NVIDIA GPU,尽管这些不是真正的目标十年前。
在这种情况下,有两种选择:
显然选择了备选案文2。
如需更多详情,请参阅:
https://stackoverflow.com/questions/62488173
复制相似问题