C · Avançado · Inglês · Técnico
data race
Situação em que duas threads acessam a mesma posição de memória ao mesmo tempo, ao menos uma escrevendo, sem sincronização. No C11 isso é comportamento indefinido.
Onde usar
Surge em contadores e flags compartilhados sem mutex. Pode funcionar por meses e quebrar só em outra CPU ou com mais otimização; o ThreadSanitizer (-fsanitize=thread) ajuda a achar.
Em código
#include <pthread.h>
long n; /* compartilhada */
void *inc(void *p) {
for (int i = 0; i < 100000; i++)
n++; /* data race */
return p;
}Exemplos
ThreadSanitizer reported a data race on the shared counter.
O ThreadSanitizer reportou um data race no contador compartilhado.
It works on my laptop, but there is a data race in there.
Funciona no meu notebook, mas tem um data race aí.
Cuidado
Achar que é inofensivo porque a operação parece simples: n++ é leitura, soma e escrita, e duas threads podem perder incrementos.
Sinônimos
corrida de dados