Чем модель памяти C ++ 20 отличается от модели памяти C ++ 11? - PullRequest
21 голосов
/ 20 июня 2020

C ++ 11 представляет новую модель памяти, которая позволяет абстрактной машине, "выполняющей" код C ++ 11, иметь представление о нескольких потоках. Он также вводит набор порядков памяти, которым подчиняются операции загрузки / сохранения памяти.

На странице википедии C ++ 20 говорится, что

пересмотренная модель памяти.

Ссылка, которую он дает, говорит, что модель памяти C ++ 11 имеет номер fl aws, который C ++ 20 будет пересматривать.

Может ли кто-нибудь дать примеры проблем, связанных с моделью памяти C ++ 11, и как это исправить в C ++ 20?

Связанный вопрос: Введение в модель памяти C ++ 11

1 Ответ

6 голосов
/ 11 июля 2020

Как предполагает @PeterM, это «(субъективно) незначительное изменение из-за проблем, обнаруженных постфактум при формализации модели памяти C ++ 11.

Старая модель была определена таким образом, что различные режимы доступа к памяти могут быть реализованы на обычных архитектурах с использованием более или менее дорогостоящих наборов аппаратных инструкций. В частности, memory_order_acquire и memory_order_release должны были быть реализованы на архитектурах ARM и Power CPU с использованием каких-то облегченных инструкций ограждения. К сожалению, оказывается, что не могут (!); и это также верно для графических процессоров NVIDIA, хотя десять лет назад они не были нацелены на них.

В этом случае было два варианта:

  1. Реализовать, чтобы соответствовать стандартный - возможно, но тогда производительность будет очень плохой, и это не было идеей.
  2. Исправьте стандарт, чтобы лучше приспособиться к этим архитектурам (при этом не испортите модель полностью)

Очевидно, был выбран вариант 2.

Для получения более подробной информации прочтите:

...