Что такое операция потребления в стандарте C ++ 11?

Я видел это этот вопрос о приобретении, выпуске, потреблении и т. д. существует, однако, ни один ответ на самом деле не определяет, что на самом деле означает «операция потребления».

В пункте 1 1.10 говорится:

Операция синхронизации в одной или нескольких ячейках памяти является либо операцией потребления, операцией получения, операцией освобождения, либо операцией получения и освобождения.

Я задавался вопросом, может ли кто-нибудь объяснить, что это такое, как оно используется в разделе 1.10 стандарта C ++ 11?

15

Решение

По-видимому, после некоторого поиска «операция потребления» — это операция с памятью, при которой значение, считываемое из памяти, используется после загрузки в нескольких операциях и создает зависимость от данных.

Способность упорядочивать операции без введения явных заборов памяти — вот что является очевидной (из моего понимания) целью memory_order_consume,

С memory_order_consume, компилятор и процессор требуется упорядочить данную нагрузку только для тех последующих загрузок и хранилищ, адрес или значение которых вычисляются из загруженного значения.
источник

Далее в этом тексте говорится:

/*Example code elided */

Ключевым моментом является то, что atomic_load_explicit() с помощью memory_order_consume гарантирует, что последующие обращения будут видеть любую инициализацию, выполненную insert_foo()даже если они выполняются одновременно и без накладных расходов на явные инструкции по ограничению памяти. В противоположность, memory_order_acquire потребовал бы явных барьеров памяти в слабо упорядоченных системах и чрезмерно ограничил бы оптимизацию компилятора во всех системах.

Проект стандарта C ++ 11 n3485 определяет memory_order_consume как:

29.3 Порядок и последовательность [atomics.order]

memory_order_consume: операция загрузки выполняет операцию потребления в уязвимом месте памяти.

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

9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]