ExpertiDict

C · Intermediário · Inglês · Técnico

volatile

/ˈvɑː.lə.təl/palavra-chave

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.

Veja também

Todos os termos de C