¿Cómo se usa una barrera de memoria en el núcleo de Linux?

Hay una ilustración en la fuente del kernel Documentation / memory-doors.txt, como esta:

    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)

Sin intervención, la CPU 2 puede percibir los eventos en la CPU 1 en un orden aleatorio efectivo, a pesar de la barrera de escritura emitida por la 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  |       +-------+
                                            +-------+
                                            :       :

No entiendo, ya que tenemos una barrera de escritura, por lo tanto, cualquier almacén debe tener efecto cuando se ejecuta C = & B, lo que significa que B sería igual a 2. Para la CPU 2, B debería haber sido 2 cuando obtiene el valor de C, que es & B, ¿por qué percibiría B como 7. Estoy realmente confundido?

Respuestas a la pregunta(2)

Su respuesta a la pregunta