Volatile verletzt seinen Hauptjob?

GemäßMSDN:

Das Schlüsselwort volatile gibt an, dass ein Feld möglicherweise von mehreren Threads geändert wird, die gleichzeitig ausgeführt werden. Felder, die als flüchtig deklariert werden, unterliegen keinen Compileroptimierungen, die den Zugriff durch einen einzelnen Thread voraussetzen. Dies stellt sicher, dass immer der aktuellste Wert im Feld vorhanden ist.

Bitte beachten Sie den letzten Satz:

Dies stellt sicher, dass immer der aktuellste Wert im Feld vorhanden ist.

Es gibt jedoch ein Problem mit diesem Schlüsselwort.

Ich habelesen dass es die Reihenfolge der Anweisungen ändern kann:

First instruction       Second instruction         Can they be swapped?
Read                         Read                         No
Read                         Write                        No
Write                       Write                         No 
Write                       Read                          Yes! <----

Dies bedeutet, dass John einen Wert für ein flüchtiges Feld festlegt undspäter Paul will das Feld lesen, Paul bekommt dasalt Wert!

Was ist hier los? Ist das nicht die Hauptaufgabe?

Ich weiß, dass es andere Lösungen gibt, aber meine Frage bezieht sich auf das volatile Keyword.

Sollte ich (als Programmierer) die Verwendung dieses Schlüsselworts verhindern müssen - wegen solch seltsamen Verhaltens?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage