Два последовательных хранилища ЦП на x86 сбрасываются в кеш, сохраняя порядок?

Предположим, что на x86 CPU0 и CPU1 работают два потока соответственно. Поток, запущенный на CPU0, выполняет следующие команды:

A=1
B=1

Строка кэша, содержащая A, изначально принадлежащая CPU1, и строка, содержащая B, принадлежащую CPU0.

У меня два вопроса:

  1. Если я правильно понимаю, оба хранилища будут помещены в буфер хранилища ЦП.Однако для первого хранилища A = 1 кэш CPU1 должен быть признан недействительным, в то время как второе хранилище B = 1 может быть немедленно очищено, поскольку CPU0 владеет строкой кэша, содержащей его. Я знаю, что процессор x86 уважает заказы в магазине. Означает ли это, что B = 1 не будет записано в кэш до A = 1 ?

  2. Предположим, что в CPU1 выполняются следующие команды:

while (B = 0);
print A

Достаточно ли добавить только границу между командами , а и print в CPU1 без добавления границы между A = 1 и B = 1 в CPU0, чтобы всегда выводить 1 на x86?

while (B=0);
lfence
print A
6
задан digger 15 January 2012 в 22:21
поделиться