Извините, я не собираюсь приводить вам прямой пример, как вы просите, потому что, поскольку вы уже просматриваете исходный код Linux, у вас их много, и они, похоже, не помогают. В этом нет ничего постыдного - любого здравомыслящего человека хотя бы изначально смущают проблемы с упорядочением доступа к памяти :)
Если вы в основном разработчик приложений, то есть все шансы, что вам не придется особо беспокоиться об этом - какие бы фреймворки параллелизма вы ни использовали, решат эту проблему за вас.
Если вы в основном разработчик драйверов устройств, то примеры довольно просто найти - всякий раз, когда в вашем коде есть зависимость от предыдущего доступа, имевшего эффект (очищен источник прерывания, записан дескриптор DMA) до того, как будет выполнен какой-либо другой доступ (повторное включение прерываний, инициирование транзакции DMA).
Если вы находитесь в процессе разработки инфраструктуры параллелизма (или ее отладки), вам, вероятно, нужно немного больше узнать об этой теме, но ваш вопрос предполагает поверхностное любопытство, а не сиюминутную необходимость? Если вы разрабатываете свой собственный метод передачи данных между потоками, не основанный на примитивах, предоставляемых платформой параллелизма, то это для всех целей и задач среда параллелизма.
Пол МакКенни написал отличную статью о необходимости барьеров памяти и их влиянии на процессор: Барьеры памяти: взгляд на оборудование для программных хакеров
Если это слишком хардкорно, я написал серию блогов из трех частей, которые немного легче и заканчиваются обзором, специфичным для ARM. Первая часть - это Порядок доступа к памяти - введение а>.
Но если вам нужны именно списки примеров, особенно для архитектуры ARM, вы можете сделать намного хуже, чем Барьерные тесты и поваренная книга.
Взгляд программиста extra-extra light и не совсем верная с архитектурной точки зрения версия:
- DMB - всякий раз, когда доступ к памяти требует упорядочивания относительно другого доступа к памяти.
- DSB - всякий раз, когда доступ к памяти должен быть завершен до выполнения программы.
- ISB - всякий раз, когда выборка инструкций должна происходить явно после определенного момента в программе, например, после обновления карты памяти или после написания кода, который должен быть выполнен. (На практике это означает «выбросить все предварительно загруженные инструкции на этом этапе».)
person
unixsmurf
schedule
19.03.2013