Читать «Эффективный и современный С++. 42 рекомендации по использованию С++11 и С++14» онлайн - страница 226

Скотт Мейерс

26

Разумной отправной точкой для начала изучения этого вопроса является запись в моем блоге от 24 декабря 2013 года в The View From Aristeia, “ThreadRAII + Thread Suspension = Trouble?”

27

Это справедливо только для std::аtomic, использующих последовательную согласованность, которая является применяемой по умолчанию (и единственной) моделью согласованности дня объектов std::atomic, использующих показанный в этой книге синтаксис. C++11 поддерживает также модели согласованности с более гибкими правилами переупорядочения кода. Такие слабые (или смягченные) модели делают возможным создание программного обеспечения, работающего более быстро на некоторых аппаратных архитектурах, но применение таких моделей дает программное обеспечение, которое гораздо труднее правильно понимать и поддерживать. Тонкие ошибки в коде с ослабленной атомарностью не являются редкостью даже для экспертов, так что вы должны придерживаться, насколько это возможно, последовательной согласованности.

28

Тип y получается с помощью вывода auto, так что используются правила, описанные в разделе 1.2. Эти правила предписывают, чтобы для объявления типов, не являющихся ссылочными или типами указателей (что и выполняется о случае y), квалификаторы const и volatile были опущены. Следовательно, типом y является просто int. Это означает, что избыточные чтения и записи y могут быть удалены. В приведенном примере компиляторы должны выполнять и инициализацию, и присваивание y, поскольку x объявлена как volatile, так что второе чтение x может давать другое значение, отличное от первого.

29

В данном разделе “копирование” параметра в общем случае означает его использование как источника для операций копирования или перемещения. Помните, что в С++ нет терминологического различия между копированием, выполняемым с помощью операции копирования, и копированием с помощью операции перемещения.

30

Для таких предложений хорошо бы иметь терминологию, отличающую копирование с помощью копирующего конструктора от копирования с помощью перемещающего конструктора.