Przykład C ++ „Bariera pamięci” [duplikat]
To pytanie ma już tutaj odpowiedź:
C ++ Memory Barriers for Atomics 2 odpowiedziCzytałem odpowiedź na to pytanie dotyczące słowa kluczowego volatile:
https://stackoverflow.com/a/2485177/997112
Osoba mówi:
Rozwiązaniem zapobiegającym zmianie kolejności jest użycie bariery pamięci, która wskazuje zarówno kompilatorowi, jak i procesorowi, że w tym punkcie nie można zmienić kolejności dostępu do pamięci. Umieszczenie takich barier wokół naszego zmiennego dostępu zmiennego zapewnia, że nawet nieulotne dostępy nie zostaną ponownie uporządkowane w obrębie tego zmiennego, co pozwoli nam pisać kod bezpieczny dla wątków.
Jednak bariery pamięci zapewniają również, że wszystkie oczekujące odczyty / zapisy są wykonywane, gdy bariera zostanie osiągnięta, dzięki czemu skutecznie daje nam wszystko, czego potrzebujemy same, co sprawia, że lotność jest niepotrzebna. Możemy po prostu całkowicie usunąć kwalifikator volatile.
W jaki sposób ta „bariera pamięci” jest zaimplementowana w C ++?
EDYTOWAĆ:
Czy ktoś mógłby podać prosty przykład kodu?