ExpertiDict

C++ · Avançado · Inglês · Técnico

volatile

ˈvɑː.lə.təlpalavra-chave

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.

Veja também

Todos os termos de C++