MS docs sind nie groß, und dies ist ein gutes Beispiel dafür. Es gibt 2 Teile zum _ReadWriteBarrier:
- sagt die CPU eine Speicherbarriere zu tun (dh mfence)
- sagen dem Compiler nicht die Barriere zu optimieren um.
Ich vermute, dass der Anruf Baum Teil bezieht sich auf # 2. dh:
int x = 0;
void foo()
{
x = 7;
_ReadWriteBarrier();
x = 8;
}
Ohne die Barriere, x = 7 kann vollständig durch den Compiler entfernt werden. Mit der Barriere, bleibt es.
Nun, was über eine Funktion, die Anrufe foo?
void bar()
{
x = 3; // optimized away?
foo();
x = 4;
}
ich glaube, in der Vergangenheit x = 3 optimiert worden sein könnte weg (was schwierig sein kann, für den Compiler zu sagen, ob das erlaubt ist oder nicht), aber jetzt wird es richtig die x = 3 Anweisungen halten.
denke ich.