volatile en C
volatile le dice al compilador que el valor puede cambiar a sus espaldas.
#include <signal.h>
static volatile sig_atomic_t interrupted = 0;
static volatile unsigned int *const hardware_register =
(volatile unsigned int *) 0x1000;
void spin_until_flag(void) {
while (!interrupted) {
}
}
unsigned int read_twice(void) {
unsigned int first = *hardware_register;
unsigned int second = *hardware_register;
return second - first;
}
Cómo funciona
- Sin él, un bucle que lee un flag puede optimizarse hasta desaparecer.
- Desactiva el cacheo en un registro, no mucho más.
- No sustituye a un atómico ni a un lock.
Palabras clave y builtins usados aquí
constintreturnsig_atomic_tstaticunsignedvoidvolatilewhile
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 354
- Tokens
- 67
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 38 segundos.
Paso 1 de 2 en Calificadores; paso 6 de 13 en Uniones, campos de bits y comportamiento indefinido.