Bueno, ciertamente estoy de acuerdo, es bastante horrible que tal detalle de implementación esté expuesto. Sin embargo, es exactamente el mismo tipo de detalle expuesto por la palabra clave . Todavía estamos muy lejos de que el generador de errores se elimine por completo de nuestro código.
Los chicos del hardware tienen mucho trabajo por hacer. La palabra clave volátil importa una gran cantidad de núcleos de CPU con un modelo de memoria débil.El mercado no ha sido amable con ellos, el Alpha y el Itanium no lo han hecho bien. No estoy muy seguro de por qué, pero sospecho que la dificultad de escribir código de hebra sólida para estos núcleos tiene mucho que ver con eso. Hacerlo mal es toda una pesadilla para depurar. La verbosidad en la documentación de MSDN Library para volátiles se aplica a este tipo de procesadores, de lo contrario es bastante inapropiado para núcleos x86/x64 y hace que suene que la palabra clave está haciendo mucho más de lo que realmente hace. Volátil simplemente evita que los valores variables se almacenen en registros de CPU en esos núcleos.
Desafortunadamente, volátil todavía importa en los núcleos x86 en muy circunstancias selectas. Todavía no he encontrado ninguna evidencia de que importe en núcleos x64. Por lo que puedo decir, y respaldado por el código fuente en SSCLI20, la instrucción Opcodes.Volatile es una opción no operativa para el jitter x64, sin cambiar ni el estado del compilador ni emitir ningún código de máquina. Eso se dirige de la manera correcta.
El consejo genérico es que donde quiera que esté considerando la volatilidad, usar el candado o una de las clases de sincronización debería ser su primera consideración. Evitar que intenten optimizar su código es una micro-optimización, derrotada por la cantidad de sueño que perderá cuando su programa muestre problemas de carrera de subprocesos.
+1 Creo que VolatileAttribute está bien en esta situación. Pero no sé por qué MS lo convierte en una palabra clave. –
C# se supone que es similar a C++, y C++ ya tiene 'volátil'. Como decidieron que necesitaban esta funcionalidad (y acepto), y la palabra clave ya está en el conjunto "similar", ¿por qué no usarla? – Blindy
@Blindy: C++ volátil tiene un patrón de uso diferente, por lo que me habría mantenido al margen. –