ExpertiDict

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

data race

/ˈdeɪ.tə ɹeɪs/substantivo

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

Veja também

Todos os termos de C