C++ C++;20';s的存储模型不同于C++;11?

C++ C++;20';s的存储模型不同于C++;11?,c++,c++11,c++20,C++,C++11,C++20,C++11引入了一种新的内存模型,使“运行”C++11代码的抽象机器具有多线程的概念。它还引入了一组内存顺序,内存加载/存储操作遵循这些顺序 C++20的维基百科页面上说它已经 修正的记忆模型 它提供的参考资料说,C++11的内存模型有许多缺陷,C++20将对此进行修改 有人能举例说明C++11的内存模型所带来的问题,以及C++20如何解决这些问题吗 相关问题: 正如@PeterM所建议的,由于C++11内存模型的形式化过程中事后发现的问题,这是一个(主观上)微小的变化 旧模型的定义使得不同的内

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

C++20的维基百科页面上说它已经

修正的记忆模型

它提供的参考资料说,C++11的内存模型有许多缺陷,C++20将对此进行修改

有人能举例说明C++11的内存模型所带来的问题,以及C++20如何解决这些问题吗

相关问题:

正如@PeterM所建议的,由于C++11内存模型的形式化过程中事后发现的问题,这是一个(主观上)微小的变化

旧模型的定义使得不同的内存访问机制可以在公共体系结构上使用成本较高或较低的硬件指令集来实现。具体来说,
memory\u order\u acquire
memory\u order\u release
应该可以在ARM和Power CPU体系结构上使用某种轻量级的围栏指令实现。不幸的是,事实证明他们不能(!);NVIDIA GPU也是如此,尽管十年前这些GPU还不是真正的目标

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

  • 实现以符合标准-可能,但是性能会非常差,这不是我们的想法
  • 修正标准以更好地适应这些架构(同时不完全破坏模型)
  • 选择2显然是被选中的

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

    • 拉哈夫、瓦菲亚迪斯、康、胡、德雷尔、
    • Hans Boehm的C++标准委员会论文

    • 我和C++失去联系,我无法做出有意义的答案,但是如果你按照维基百科的条目来做,它会导致