Wie zerstäuben Zäune Load-Modify-Store-Operationen?

Ich habe gelesen, dass das Setzen eines Fencing-Befehls nach einem Laden-Ändern-Speichern-Befehl, wie BTS, bewirkt, dass Sie den zweiten atomar behandeln können. Laut der Intel-Dokumentation sind die Zaunanweisungen jedoch wie folgt beschrieben

(MFENCE)

Führt eine Serialisierungsoperation für alle Anweisungen zum Laden aus dem Speicher und Speichern in den Speicher durch, die vor der Anweisung MFENCE ausgegeben wurden. Diese Serialisierungsoperation garantiert, dass jeder Lade- und Speicherbefehl, der dem MFENCE-Befehl in der Programmreihenfolge vorausgeht, global sichtbar wird, bevor ein Lade- oder Speicherbefehl auf den MFENCE-Befehl folgt.

Wie garantiert ein solches Verhalten die erwähnte "Atomizität"?

Wenn zwei gleichzeitige Durchläufe des folgenden Codes von verschiedenen Prozessoren ausgeführt werden, wie würde der Fencing verhindern, dass in beiden Fällen 0 in CF gelesen wird?

start memory assumption: [addr] contains the word 0

BTS WORD PTR [addr], 0
MFENCE

Antworten auf die Frage(1)

Ihre Antwort auf die Frage