В стандарте С++ 11 упоминается раздел 1.10/5, но формально не определяет термины acquire operation
, release operation
и consume operation
. Затем в Разделе 29 далее используются эти термины для описания действий определенных порядков памяти, атомных операций и ограждений памяти. Например, 29.3/1 "Порядок и согласованность" гласит:
memory_order_release, memory_order_acq_rel и memory_order_seq_cst: операция хранилища выполняет операцию освобождения [выделение добавлено] в поврежденную ячейку памяти.
Этот тип языка повторяется во всем разделе 29, но мне немного мешает, что все значения для перечислений memory_order
основаны на типах операций, которые сами по себе не формализуются стандартом, но должны иметь некоторые общие согласованное значение для их эффективности в качестве определений.
Положите другой способ, если я сказал: "Бар - перевернутый foo", конкретный смысл bar и foo неоднозначен, поскольку ни один из них формально не определен. Определены только их относительная природа.
Знает ли стандарт С++ 11 или какой-либо другой документ комитета стандартов С++ 11 формально определить, что такое acquire operation
, release operation
и т.д., или это просто понятные термины? Если последнее, есть ли хорошая рекомендация, которая считается отраслевым стандартом для значения этих операций? Я специально спрашиваю, потому что модели согласованности аппаратной памяти не созданы равными, и поэтому я полагаю, что должна быть какая-то общепринятая ссылка, которая позволяет тем, кто внедряет компиляторы и т.д. Правильно переводить семантику этих операций в собственные команды сборки.