Java内存模型和C++ 11内存模型之间有什么相似之处?

cia*_*mej 41 c++ java memory-model java-memory-model c++11

新的c ++标准引入了内存模型的概念.关于它的问题已经有了问题,它是什么意思,它如何改变我们用c ++编写代码的方式等等.

我有兴趣了解C++内存模型与旧的,众所周知的Java内存模型(1.5)的关系.它是一样的吗?它是相似的吗?他们有什么重大差异吗?如果是这样,为什么?

java内存模型已经存在很长时间了很多人都知道它非常不错,所以我想通过比较它来学习C++内存模型可能会有所帮助.

Ant*_*ams 22

Java内存模型对C++ 11内存模型有重要影响,我们将术语发生在之前与之同步.但是,与Java内存模型相比,C++ 11内存模型提供了更精细的内存排序控制.

如果您使用内存排序进行读取,为写入排序以及为RMW操作进行排序,则Java volatile变量等效于C++ 11 std::atomic<>变量.std::memory_order_acquirestd::memory_order_releasestd::memory_order_acq_rel

Java中没有等价物std::memory_order_relaxed,或者std::memory_order_seq_cst.

  • 似乎java volatile等同于C++ std :: memory_order_seq_cst.实际上,在java中,IRIW情况必须是序列一致的.见[this](http://shipilev.net/blog/2014/jmm-pragmatics/),[this](http://llvm.org/docs/Atomics.html)和[this](http:// stackoverflow.com/questions/24492061/the-volatile-key-word-and-memory-consistency-errors). (3认同)