Определяет ли стандарт C++11 формально операции получения, освобождения и потребления?

В стандарте C++11, раздел 1.10/5 упоминает, но формально не определяет термины Acquisition Operation, освободить операциюи использовать операцию. Затем в разделе 29 эти термины используются для описания действий определенных порядков памяти, атомарных операций и ограждений памяти. Например, 29.3/1 в «Порядке и согласованности» гласит:

memory_order_release, memory_order_acq_relи memory_order_seq_cst: операция сохранения выполняет операцию освобождения[курсив добавлен] на затронутую ячейку памяти.

Этот тип языка повторяется на протяжении всего раздела 29, но меня немного беспокоит, что все значения перечислений memory_orderоснованы на типах операций, которые сами по себе не формализованы стандартом, однако должны иметь какое-то общепринятое значение, чтобы быть эффективными в качестве определений.

Иными словами, если бы я сказал: «A bar — это перевернутый foo», то конкретное значение barи fooнеоднозначно, поскольку ни один из терминов формально не определен. Определяется только их относительная природа.

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

21
задан BeeOnRope 22 June 2016 в 17:32
поделиться