新的 C++ 标准引入了内存模型的概念。Stack Overflow 上已经有关于它的问题,它是什么意思,它如何改变我们用 C++ 编写代码的方式等等。
我有兴趣了解 C++ 内存模型与旧的、众所周知的 Java 内存模型 (1.5) 之间的关系。是一样的吗?是不是很相似?它们有什么显着差异吗?如果是这样,为什么?
Java 内存模型已经存在很长时间了,很多人都非常了解它,所以我想通过将它与 Java 模型进行比较来学习 C++ 内存模型可能会有所帮助,不仅对我有帮助。
新的 C++ 标准引入了内存模型的概念。Stack Overflow 上已经有关于它的问题,它是什么意思,它如何改变我们用 C++ 编写代码的方式等等。
我有兴趣了解 C++ 内存模型与旧的、众所周知的 Java 内存模型 (1.5) 之间的关系。是一样的吗?是不是很相似?它们有什么显着差异吗?如果是这样,为什么?
Java 内存模型已经存在很长时间了,很多人都非常了解它,所以我想通过将它与 Java 模型进行比较来学习 C++ 内存模型可能会有所帮助,不仅对我有帮助。
The Java memory model was an important influence on the C++11 memory model, and was where we pulled the terms happens-before and synchronizes-with from. However, the C++11 memory model offers much more fine-grained control over memory ordering than the Java memory model.
Java volatile
variables are equivalent to C++11 std::atomic<>
variables, if you use std::memory_order_acquire
memory ordering for reads, std::memory_order_release
ordering for writes, and std::memory_order_acq_rel
ordering for RMW operations.
There is no equivalent in Java to std::memory_order_relaxed
, or std::memory_order_seq_cst
.