Эффекты использования 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]