Przykro mi, nie zamierzam dawać ci prostego przykładu, o który pytasz, ponieważ ponieważ przeglądasz już kod źródłowy Linuksa, masz mnóstwo osób, które mogą się obejść i nie wydają się Wsparcie. Nie ma w tym wstydu - każdy rozsądny człowiek jest początkowo zdezorientowany przez problemy z zamawianiem dostępu do pamięci :)
Jeśli jesteś głównie programistą aplikacji, to jest szansa, że nie będziesz się musiał o to martwić - cokolwiek używane struktury współbieżności rozwiążą to za Ciebie.
Jeśli jesteś głównie programistą sterowników urządzeń, to przykłady są dość proste do znalezienia - zawsze, gdy istnieje zależność w twoim kodzie od wcześniejszego dostępu, który wywarł jakiś skutek (usunął źródło przerwania, napisał deskryptor DMA) zanim wykonywany jest inny dostęp (ponowne włączanie przerwań, inicjowanie transakcji DMA).
Jeśli jesteś w trakcie tworzenia struktury współbieżności (lub debugowania jednej), prawdopodobnie będziesz musiał przeczytać nieco więcej na ten temat - ale twoje pytanie sugeruje powierzchowną ciekawość, a nie natychmiastową potrzebę? Jeśli opracowuje się własną metodę przekazywania danych między wątkami, a nie w oparciu o prymitywy udostępniane przez strukturę współbieżności, to dla wszystkich celów i celów istnieje platforma współbieżności.
Paul McKenney napisał doskonały papier na potrzeby bariera pamięci i jakie efekty rzeczywiście mają w procesorze: Memory Barriers: a Hardware View for Software Hackers
Jeśli to nieco zbyt hardcore, napisałem 3-częściowy blogu serię, która jest nieco bardziej lekki i kończy się widokiem specyficznym dla ARM. Pierwsza część to Memory access ordering - an introduction.
Ale jeśli jest to konkretna lista przykładów, których szukasz, szczególnie w architekturze ARM, możesz zrobić znacznie gorzej niż Barrier Litmus Tests and Cookbook.
Wyjątkowo lekki dodatkowy widok programisty i nie do końca poprawny architektonicznie wersja:
- DMB - ilekroć wymaga zamawiania dostępu do pamięci w odniesieniu do innego dostępu do pamięci.
- DSB - zawsze, gdy dostęp do pamięci musi zostać zakończony przed rozpoczęciem wykonywania programu.
- ISB - za każdym razem, gdy pobranie instrukcji musi nastąpić bezpośrednio po określonym punkcie programu, na przykład po aktualizacji map pamięci lub po zapisaniu kodu do wykonania. (W praktyce oznacza to "wyrzucenie wszelkich wcześniej przygotowanych instrukcji w tym miejscu".)
To pytanie było ostatnim przykładem: http://stackoverflow.com/q/15003405/1163019 – auselen
Przewodnik programisty Cortex zawiera także sekcję dla barier (11.2). http://infocenter.arm.com/help/topic/com.arm.doc.den0013c/index.html – auselen
Nadal głosuję, aby zamknąć, ponieważ jest to bardzo szerokie pytanie. – auselen