What are the similarities between the Java memory model and the C++11 memory model?
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
.