GOOGLE ADS

martes, 26 de abril de 2022

¿Por qué existe el volátil?

¿Qué hace la volatilepalabra clave? En C++ ¿qué problema resuelve?

En mi caso, nunca lo he necesitado a sabiendas.


Solución del problema

volatilees 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

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...