¿Qué hace la volatile
palabra clave? En C++ ¿qué problema resuelve?
En mi caso, nunca lo he necesitado a sabiendas.
Solución del problema
volatile
es necesario si está leyendo desde un lugar en la memoria que, digamos, un proceso/dispositivo/lo que sea completamente separado puede escribir.
Solía trabajar con ram de doble puerto en un sistema multiprocesador en C directo. Usamos un valor de 16 bits administrado por hardware como un semáforo para saber cuándo el otro tipo había terminado. Esencialmente hicimos esto:
void waitForSemaphore()
{
volatile uint16_t* semPtr = WELL_KNOWN_SEM_ADDR;/*well known address to my semaphore*/
while ((*semPtr)!= IS_OK_FOR_ME_TO_PROCEED);
}
Sin volatile
, el optimizador ve el ciclo como inútil (¡El tipo nunca establece el valor! ¡Está loco, deshazte de ese código!) y mi código continuaría sin haber adquirido el semáforo, causando problemas más adelante.
No hay comentarios:
Publicar un comentario