gpt4 book ai didi

c++ - 并发的 C++03 内存模型是什么?

转载 作者:IT老高 更新时间:2023-10-28 12:35:51 25 4
gpt4 key购买 nike

C++03中并发的内存模型是什么?

(而且,C++11 是否更改了内存模型以更好地支持并发?)

最佳答案

C++ 内存模型是针对 C++ 代码读取/写入物理内存的时间和原因的规范。

在下一个 C++ 标准之前,C++ 内存模型与 C 相同。在 C++0x 标准中,预计将包含一个适合多线程的内存模型(参见 here),并将成为其中的一部分可能是 C 标准的下一个修订版,C1X。当前的一个是简陋的:

  • 它只指定当前程序可观察到的内存操作的行为。
  • 当多个进程访问同一内存时,它没有说明并发内存访问(没有共享内存或进程的概念)。
  • 当多个线程访问同一内存时,它没有说明并发内存访问的任何内容(没有线程的概念)。
  • 它无法指定内存访问的顺序(编译器优化包括代码移动和最近的处理器重新排序访问,两者都可能破坏模式,例如双重检查初始化)。

因此,当前状态是:仅当您有 1 个进程、其主线程且不编写依赖于变量读/写的特定顺序的代码时才指定 C++ 内存操作,仅此而已。从本质上讲,这意味着除了传统的 hello world 程序之外,您已经完蛋了。

当然,系统会提示您添加 “它今天在我的机器上运行,你不可能是对的”。正确的句子应该是 “它今天可以在我的机器上使用这种特定的硬件、操作系统(线程库)和编译器组合,它们彼此了解足够多,可以实现一些有点工作但可能会在某些时候中断的东西".

好吧好吧,这有点苛刻,但是 hell ,even Herb Sutter acknowledges that (只需阅读介绍),他正在谈论最普遍的 C/C++ 工具链之一的所有 2007 年前版本...

C++ 标准委员会试图提出一些可以解决所有这些问题的方法,同时仍然比 Java 的内存模型限制更少(因此性能更好)。

Hans Boehm 收藏了 here一些关于这个问题的论文的指针,包括学术论文和 C++ 委员会的论文。

关于c++ - 并发的 C++03 内存模型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/220752/

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