C++ · Intermediário · Inglês · Técnico
data race
Acesso simultâneo de duas threads ao mesmo local de memória, em que ao menos um é escrita e não há sincronização. Em C++ isso é comportamento indefinido.
Onde usar
Aparece como resultados que mudam a cada execução ou travamentos raros em produção. Ferramentas como o ThreadSanitizer ajudam a achar.
Em código
int n = 0;
auto f = [&] {
for (int i = 0; i < 9; ++i) ++n;
};
std::thread a(f), b(f);
a.join(); b.join(); // data race em nExemplos
ThreadSanitizer found a data race on this counter.
O ThreadSanitizer achou um data race nesse contador.
Two threads write to the vector, that's a data race.
Duas threads escrevem no vector, isso é data race.
Cuidado
Não é o mesmo que race condition: data race é um defeito de memória definido pelo padrão, enquanto race condition é um erro de lógica ligado ao tempo.
Sinônimos
corrida de dados