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?