О барьерах памяти связано много информации. Большая часть информации относится к многоядерным или многопроцессорным архитектурам. Где-то здесь, в Stackoverflow, также говорится, что барьеры памяти не требуются на одноядерных процессорах.
Пока я не могу найти четкого объяснения, почему это не требуется на одноядерных процессорах. Предположим, что загрузка и хранилище переупорядочены в потоке A, и между обеими инструкциями происходит переключение контекста. В этом случае поток B может отреагировать не так, как ожидалось. Почему переключение контекста на одном ядре должно вести себя иначе, чем на двух потоках на разных ядрах? (кроме проблем с согласованностью кеша)
Например, информация с сайта ARM:
«Архитектурно определено, что программное обеспечение должно выполнять операцию барьера памяти данных (DMB): • между получением ресурса, например, посредством блокировки мьютекса (взаимное исключение) или уменьшения семафора, и любым доступом к этому ресурсу • перед выполнением ресурс, доступный, например, путем разблокировки мьютекса или увеличения семафора "
Это звучит очень ясно, однако в приведенном примере они явно относятся к многоядерной конфигурации.