C++ · Avançado · Inglês · Técnico
volatile
Qualificador que diz ao compilador que o valor pode mudar fora do programa, então toda leitura e escrita acontece de fato. Serve para registradores de hardware, não para threads.
Onde usar
Usado em código embarcado e de baixo nível, com hardware que altera valores por conta própria. Em code review, volatile para sincronizar threads é erro clássico: use std::atomic.
Em código
volatile unsigned* const status =
reinterpret_cast<unsigned*>(0x4000);
while ((*status & 1) == 0) {
// espera o hardware ligar o bit 0
}Exemplos
That register has to be volatile or the compiler removes the loop.
Esse registrador precisa ser volatile ou o compilador remove o laço.
Don't use volatile for thread flags, use atomic.
Não use volatile para flags de thread, use atomic.
Cuidado
Em C++, volatile não dá atomicidade nem ordenação entre threads, diferente de Java, onde a palavra tem esse efeito.
Origem
Do latim volatilis, que voa ou é instável.