Por lo que entiendo, el modificador 'volátil' en C# tiene dos efectos:Ejemplo de 'volátil' que impide una optimización del compilador en C#?
- Insertos cercas como sea necesario para el procesador de destino
- previene ciertos optimizaciones del compilador
En x86/amd64, (1) es irrelevante. Esos procesadores no requieren vallas para la semántica volátil. (ia64 es diferente, sin embargo)
Por lo tanto, estamos a (2). Pero, para los ejemplos que probé, volátil no hace ninguna diferencia en el conjunto jit-ted.
Mi pregunta es: ¿Puede dar un ejemplo de un ejemplo de código C# donde agregar un modificador 'volátil' en un campo da como resultado un código de ensamblado diferente jit-ted?
Impresionante, ¡eso es exactamente lo que estaba buscando! Aquí, volátil realmente da como resultado diferentes códigos de ensamblaje. –
En caso de que alguien tenga curiosidad, sin un modificador volátil, el valor del campo se almacena en caché en un registro. Y, cuando el valor está en un registro, el núcleo de bucle nunca 'notará' la actualización hecha por otro núcleo. –