C'è un'illustrazione in kernel fonte Documentazione/memory-barriers.txt, in questo modo:come è una barriera di memoria nel kernel di Linux è usato
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)
Senza l'intervento, CPU 2 può percepire gli eventi su CPU 1 in qualche modo efficace a caso, nonostante la barriera scrittura rilasciata da 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 | +-------+ +-------+ : :
non capisco, dal momento che abbiamo una barriera di scrittura, quindi, eventuali s tore deve avere effetto quando C = & B viene eseguito, il che significa da che B equivale a 2. Per CPU 2, B dovrebbe essere 2 quando ottiene il valore di C, che è & B, perché dovrebbe percepire B come 7. Sono davvero confuso.
Molto conciso e giusto al punto – dspjm