Jest to ilustracja w kernel source/Documentation pamięci-barriers.txt, tak:jak jest bariera pamięci w jądrze Linux jest używany
CPU 1 CPU 2 ======================= ======================= { B = 7; X = 9; Y = 8; C = &Y } STORE A = 1 STORE B = 2 <write barrier> STORE C = &B LOAD X STORE D = 4 LOAD C (gets &B) LOAD *C (reads B)
Bez interwencji procesora 2 mogą postrzegać wydarzenia na CPU 1 w jakiś skutecznie losowej kolejności, pomimo bariery zapisu wydanego przez CPU 1:
+-------+ : : : : | | +------+ +-------+ | Sequence of update | |------>| B=2 |----- --->| Y->8 | | of perception on | | : +------+ \ +-------+ | CPU 2 | CPU 1 | : | A=1 | \ --->| C->&Y | V | | +------+ | +-------+ | | wwwwwwwwwwwwwwww | : : | | +------+ | : : | | : | C=&B |--- | : : +-------+ | | : +------+ \ | +-------+ | | | |------>| D=4 | ----------->| C->&B |------>| | | | +------+ | +-------+ | | +-------+ : : | : : | | | : : | | | : : | CPU 2 | | +-------+ | | Apparently incorrect ---> | | B->7 |------>| | perception of B (!) | +-------+ | | | : : | | | +-------+ | | The load of X holds ---> \ | X->9 |------>| | up the maintenance \ +-------+ | | of coherence of B ----->| B->2 | +-------+ +-------+ : :
nie rozumiem, ponieważ mamy barierę zapisu, więc wszelkie s tore musi zadziałać, gdy C = & B zostanie wykonane, co oznacza, że B będzie równe 2. Dla CPU 2, B powinno być 2, gdy uzyska wartość C, która jest & B, dlaczego miałaby postrzegać B jako 7. Jestem naprawdę zdezorientowany.
Bardzo zwięzłe i prawo do punktu – dspjm