Извините, не собираюсь приводить пример, как вы спрашиваете, потому что, поскольку вы уже просматриваете исходный код Linux, у вас есть много таких, чтобы идти, и они не появляются Помогите. Никакой стыд в этом - каждый здравомыслящий человек, по крайней мере, сначала путается вопросами упорядочения доступа к памяти :)
Если вы в основном разработчик приложений, то есть все шансы, что вам не придется слишком беспокоиться об этом - что угодно которые вы используете, разрешит его для вас.
Если вы в основном разработчик драйверов устройств, то примеры достаточно просты для поиска - всякий раз, когда в вашем коде присутствует зависимость от предыдущего доступа, имеющего эффект (очищенный источник прерывания, написанный дескриптором DMA), прежде чем выполняется другой доступ (повторное включение прерываний, инициирование транзакции DMA).
Если вы разрабатываете инфраструктуру параллелизма (или отлаживаете ее), вам, вероятно, нужно немного почитать эту тему, но ваш вопрос предполагает поверхностное любопытство, а не непосредственную необходимость? Если вы разрабатываете свой собственный метод передачи данных между потоками, а не на основе примитивов, предоставляемых инфраструктурой параллелизма, то для всех целей и задач используется структура параллелизма.
Пол McKenney написал отличную статью о необходимости барьеров памяти, и какие эффекты они на самом деле имеют в процессоре: Memory Barriers: a Hardware View for Software Hackers
Если это немного слишком хардкор, я написал серию блога на 3-часть, которая немного более легкий, и заканчивается с ARM-специфическим представлением. Первая часть - Memory access ordering - an introduction.
Но если это конкретные списки примеров, которые вы используете, особенно для архитектуры ARM, вы можете сделать намного хуже, чем Barrier Litmus Tests and Cookbook.
экстра-экстра вид легкой программиста и не совсем архитектурно правильная версия:
- DMB - всякий раз, когда доступ к памяти требует упорядочения в отношении другого доступа к памяти.
- DSB - всякий раз, когда доступ к памяти должен быть завершен до выполнения программы.
- ISB - каждый раз, когда выборки команд должны явно выполняться после определенной точки в программе, например, после обновления карты памяти или после написания кода, который должен быть выполнен. (На практике это означает «выбросить любые предварительно запрограммированные инструкции на данный момент».)
Этот вопрос был недавним примером: http://stackoverflow.com/q/15003405/1163019 – auselen
В руководстве для программистов Cortex есть раздел для барьеров (11.2). http://infocenter.arm.com/help/topic/com.arm.doc.den0013c/index.html – auselen
Я все еще голосую, чтобы закрыть, так как это очень широкий вопрос. – auselen