Эффекты использования memory_order_consume

Я постоянно пытался обернуть голову вокруг этой модели заказа и как она полезна. Этот ответ гласит

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

Однако это не имеет смысла для меня, так как было бы невозможно выполнить более поздние загрузки без значения, считываемого первой атомной нагрузкой. В этом посте представлен хороший обзор моделей согласованности, и в нем говорится, что архитектуры ARM и Power имеют модель слабого упорядочения, за исключением того, что они обеспечивают упорядочение в зависимости от данных.

Означает ли это, что consumer_memory_order бесполезен во всех основных архитектурах, кроме Alpha?

Если нет, то, учитывая приведенный ниже пример, что и где можно переупорядочить?

ldr r1, [r0]
ldr r7, [r0]
str r2, [r0]
ldr r3, [r1]
str r7, [r3]
ldr r4, [r3]

0 ответов

Другие вопросы по тегам