首页 > 解决方案 > C++20 的内存模型与 C++11 的内存模型有何不同?

问题描述

C++11 引入了一种新的内存模型,让抽象机器“运行”C++11 代码有一个关于多线程的概念。它还引入了一组内存顺序,内存加载/存储操作遵守这些顺序。

C ++ 20的维基百科页面说它有

修改后的记忆模型。

它给出的参考资料说 C++11 的内存模型有许多缺陷,C++20 将对其进行修改。

有人可以举一些例子来说明 C++11 的内存模型带来的问题,以及 C++20 中的问题如何解决?

相关问题: C++11的内存模型介绍

标签: c++c++11c++20

解决方案


正如@PeterM 所暗示的那样,由于事后发现 C++11 内存模型形式化的问题,它是一个(主观上)微小的变化。

旧模型被定义为可以使用或多或少成本高昂的硬件指令集在通用架构上实现不同的内存访问机制。具体来说,memory_order_acquire应该memory_order_release可以使用某种轻量级围栏指令在 ARM 和 Power CPU 架构上实现。不幸的是,事实证明他们不能(!);NVIDIA GPU 也是如此,尽管十年前它们并不是真正的目标。

在这种情况下,有两种选择:

  1. 实施以符合标准 - 可能,但性能会非常糟糕,这不是想法。
  2. 修复标准以更好地适应这些架构(同时不完全弄乱模型)

显然选择了选项 2。

有关更多详细信息,请阅读:


推荐阅读