gpt4 book ai didi

c++ - C++20 的内存模型与 C++11 的内存模型有何不同?

转载 作者:行者123 更新时间:2023-12-01 08:58:02 25 4
gpt4 key购买 nike

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

a revised memory model.


它给出的引用资料说 C++11 的内存模型有许多缺陷,C++20 将对其进行修改。
有人可以举例说明 C++11 的内存模型带来的问题,以及 C++20 中的问题如何解决吗?
相关问题:
Introduction to C++11's memory model

最佳答案

正如@PeterM 所暗示的那样,由于 C++11 内存模型的形式化在事后发现的问题,这是一个(主观上)微小的变化。
旧模型的定义使得不同的内存访问机制可以使用成本更高或更低的硬件指令集在通用架构上实现。具体来说,memory_order_acquirememory_order_release应该可以使用某种轻量级栅栏指令在 ARM 和 Power CPU 架构上实现。不幸的是,事实证明他们不能(!); NVIDIA GPU 也是如此,尽管十年前它们并不是真正的目标。
在这种情况下,有两种选择:

  • 实现以符合标准 - 可能,但性能会很差,这不是想法。
  • 修复标准以更好地适应这些架构(同时不会完全弄乱模型)

  • 显然选择了选项 2。
    有关更多详细信息,请阅读:
  • Lahav, Vafeiadis, Kang, Hur, Dreyer, Repairing Sequential Consistency in C/C++11 .
  • Hans Boehm 的 C++ 标准委员会文件 P0668R4: Revising the C++ memory model .
  • 关于c++ - C++20 的内存模型与 C++11 的内存模型有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62488173/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com