Volatile viola su principal función?

De acuerdo aMSDN:

La palabra clave volátil indica que un campo puede ser modificado por varios subprocesos que se ejecutan al mismo tiempo. Los campos que se declaran volátiles no están sujetos a las optimizaciones del compilador que asumen el acceso por un solo hilo. Esto garantiza que el valor más actualizado esté presente en el campo en todo momento.

Por favor note la última oración:

Esto garantiza que el valor más actualizado esté presente en el campo en todo momento.

Sin embargo, hay un problema con esta palabra clave.

Heleer que puede cambiar el orden de las instrucciones:

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

Esto significa que John establece un valor en un campo volátil, yluego Paul quiere leer el campo, Paul está recibiendo laantiguo ¡valor!

¿Qué está pasando aquí? ¿No es ese el trabajo principal?

Sé que hay otras soluciones, pero mi pregunta es sobre la palabra clave volátil.

¿Debería yo (como programador) evitar el uso de esta palabra clave, debido a un comportamiento tan extraño?

Respuestas a la pregunta(3)

Su respuesta a la pregunta