¿Por qué usamos palabras clave volátiles en C ++?

Posible duplicado:
C ++: ¿Cuándo te ha ayudado la palabra clave volátil?

Nunca lo he usado, pero me pregunto por qué las personas lo usan. ¿Qué hace exactamente? Busqué en el foro, encontré solo C # o temas de Java.

Considera este código,

int some_int = 100; while(some_int == 100) { //your code } 

Cuando se comstack este progtwig, el comstackdor puede optimizar este código, si descubre que el progtwig nunca hace ningún bash de cambiar el valor de some_int , por lo que puede tener la tentación de optimizar el ciclo while cambiándolo de while(some_int == 100) a simplemente while(true) para que la ejecución sea rápida (ya que la condición en while loop parece ser true siempre). (Si el comstackdor no lo optimiza, tiene que buscar el valor de some_int (si no está cargado en un registro) y compararlo con 100, cada vez que obviamente es un poco lento).

Sin embargo, a veces, la optimización (de algunas partes de su progtwig) puede ser indeseable , porque puede ser que alguien más esté cambiando el valor de some_int desde fuera del progtwig, que el comstackdor desconoce , ya que no puede verlo; pero es cómo lo has diseñado. En ese caso, ¡la optimización del comstackdor no produciría el resultado deseado!

Por lo tanto, para garantizar el resultado deseado, debe evitar que el comstackdor optimice el ciclo while alguna manera. Ahí es donde la palabra clave volatile desempeña su papel. Todo lo que necesitas hacer es esto,

 volatile int some_int = 100; //note the 'volatile' qualifier now! 

En otras palabras, explicaría esto de la siguiente manera:

volatile le dice al comstackdor que,

“Oye comstackdor, soy volátil y, ya sabes, puedo ser cambiado por un XYZ del que ni siquiera eres consciente. Ese XYZ podría ser cualquier cosa. Tal vez algún alienígena fuera de este planeta lo llame progtwig. Quizás algo de iluminación, alguna forma de interrupción, volcanes, etc. pueden mutarme. Tal vez. ¡Nunca se sabe quién me va a cambiar! Entonces, tú ignorante, deja de jugar a un dios omnisciente y no te atrevas a tocar el código donde estoy presente. ? ”

Bueno, así es como volatile impide que el comstackdor optimice el código. Ahora googlee para ver algunos ejemplos de muestra.


Citando del estándar C ++ ($ 7.1.5.1 / 8)

[..] volátil es una sugerencia para la implementación para evitar una optimización agresiva que involucre al objeto porque el valor del objeto puede ser cambiado por medios indetectables por una implementación. […]

Tema relacionado:

¿Hacer volátil una estructura hace que todos sus miembros sean volátiles?

En la progtwigción de computadoras, particularmente en los lenguajes de progtwigción C, C ++ y C #, una variable u objeto declarado con la palabra clave volatile usualmente tiene propiedades especiales relacionadas con la optimización y / o el subproceso. En términos generales, la palabra clave volatile está destinada a evitar que el (pseudo) comstackdor aplique optimizaciones en el código que asumen que los valores de las variables no pueden cambiar “por sí mismos”. (c) Wikipedia

http://en.wikipedia.org/wiki/Volatile_variable