Каковы сходства между моделью памяти Java и моделью памяти C ++ 11? - PullRequest
41 голосов
/ 09 сентября 2011

Новый стандарт c ++ вводит понятие модели памяти. На SO уже были вопросы об этом, что это значит, как это меняет способ написания кода на c ++ и т. Д.

Мне интересно узнать, как модель памяти C ++ соотносится со старой, хорошо известной моделью памяти java (1.5). Это то же самое? Это похоже? Есть ли у них существенные различия? Если так, то почему?

Модель памяти java существует с давних времен, и многие люди знают ее достаточно прилично, поэтому я думаю, что было бы полезно, не только для меня, изучить модель памяти C ++, сравнив ее с java.

1 Ответ

22 голосов
/ 10 сентября 2011

Модель памяти Java оказала большое влияние на модель памяти C ++ 11, и именно здесь мы взяли термины произойдет до и синхронизируется с из. Однако модель памяти C ++ 11 обеспечивает гораздо более детальный контроль над упорядочением памяти, чем модель памяти Java.

Java volatile переменные эквивалентны переменным C ++ 11 std::atomic<>, если вы используете std::memory_order_acquire упорядочение памяти для чтения, std::memory_order_release упорядочение для записи и std::memory_order_acq_rel упорядочение для операций RMW.

В Java нет эквивалента std::memory_order_relaxed или std::memory_order_seq_cst.

...