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?