C · Intermediário · Inglês · Técnico
volatile
Qualificador que avisa ao compilador que o valor pode mudar fora do fluxo do programa, como em registradores de hardware, e impede que leituras e escritas sejam otimizadas.
Onde usar
Usado em acesso a hardware mapeado em memória. Não substitui mutex nem atômicos em threads: não garante atomicidade nem ordem entre núcleos.
Em código
#define STATUS (*(volatile unsigned *)0x4002)
void espera(void) {
while ((STATUS & 1u) == 0)
; // relê o registrador a cada volta
}Exemplos
The status register must be volatile, or the loop gets optimized away.
O registrador de status precisa ser volatile, senão o laço é otimizado e some.
Volatile is not a substitute for a mutex.
Volatile não substitui um mutex.
Cuidado
Usar volatile para sincronizar threads; ele só impede otimizações do compilador, não cria barreira de memória nem torna o acesso atômico.
Sinônimos
qualificador volátil
Antônimos
const
Origem
Do latim volatilis, que voa, que muda.