Por lo general, un código como este indica que vol_flag
se espera que se modifique externamente en algún momento. Aquí, externamente puede significar un hilo diferente, un manejador de interrupciones, una pieza de hardware (en el caso de una IO mapeada en memoria) etc. Este ciclo efectivamente espera el evento externo que cambia el indicador.
La palabra clave volatile
es una forma para que el programador exprese el hecho de que no es seguro asumir lo que es aparente del código: es decir, que el indicador no se cambia en el ciclo. Por lo tanto, evita que el compilador realice optimizaciones que podrían comprometer las intenciones detrás del código. En cambio, el compilador se ve obligado a hacer una referencia de memoria para recuperar el valor de la bandera.
Tenga en cuenta que (a diferencia de Java) volatile
en C/C++ no establece sucede antes relación y no garantiza ningún pedido o la visibilidad de las referencias de memoria a través de acceso volátil. Además, no asegura la atomicidad de las referencias variables. Por lo tanto, no es una herramienta para la comunicación entre hilos. Ver this para más detalles.
Parece un bloqueo de giro mal hecho en código de subprocesos múltiples. –
Tal vez es para la depuración? – animaonline
Este tipo de código se encuentra generalmente en programas para microcontroladores. – alexander