C++03中的并发内存模型是什么?
(而且,C++11是否更改了内存模型以更好地支持并发性?)
发布于 2008-10-21 07:27:04
看到一些其他的答案,似乎许多C++程序员甚至不知道您所问的“内存模型”是什么意思。
从某种意义上讲,问题是关于内存模型:关于写/读重新排序(可能发生在编译器端或运行时端)有什么保证(如果有)?这个问题对于多线程编程非常重要,因为如果没有这样的规则,编写正确的多线程程序是不可能的,有些令人惊讶的事实是,由于目前缺乏显式的内存模型,许多多线程程序或多或少都是“靠运气”--最常见的是由于编译器假设了函数调用中的指针别名。-请参阅
在当前的C++中,没有标准的内存模型。一些编译器定义了易失性变量的内存模型,但这是非标准的。C++0x为此定义了新的“原子”原语。有关检查最新状态的详尽起点,请访问Threads and memory model for C++
重要的链接还包括Concurrency memory model、Atomic Types和C++ Data-Dependency Ordering: Atomics and Memory Model标准提案。
发布于 2008-10-21 04:54:04
不幸的是,在C++中没有像Java语言那样的“标准内存模型”。实际的实现留给了编译器、运行时库和处理器。
因此,C++内存模型==混杂的模型,这意味着您总是必须尝试编写不依赖于特定内存模型的安全代码,这也适用于线程编程,因为编译器可以在临界区之外执行任何它想要的优化,甚至是无序处理!
发布于 2008-10-21 07:23:33
如何查看C++标准委员会网站上的论文:
https://stackoverflow.com/questions/220752
复制相似问题