Có một minh họa trong kernel nguồn tài liệu/bộ nhớ barriers.txt, như thế này:như thế nào là một rào cản bộ nhớ trong kernel Linux được sử dụng
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)
Nếu không có sự can thiệp, CPU 2 có thể cảm nhận được sự kiện trên CPU 1 trong một số trật tự một cách hiệu quả ngẫu nhiên, bất chấp những rào cản ghi do 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 | +-------+ +-------+ : :
tôi không hiểu, vì chúng ta có một ghi rào cản, vì vậy, bất kỳ s xé phải có hiệu lực khi C = & B được thực thi, có nghĩa là Whence B bằng 2. Đối với CPU 2, B phải là 2 khi nó nhận giá trị C, là & B, tại sao nó sẽ nhận B là 7. Tôi thực sự bối rối.
Rất súc tích và phù hợp với điểm – dspjm