ExpertiDict

Go · Intermediário · Inglês · Técnico

data race

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

Acesso simultâneo de duas ou mais goroutines à mesma variável, com pelo menos uma escrita e sem sincronização. O resultado é imprevisível e o comportamento do programa é indefinido.

Onde usar

Costuma aparecer como contador errado ou mapa corrompido só em produção. Mapa lido e escrito ao mesmo tempo ainda pode terminar com 'fatal error: concurrent map writes'.

Em código

n := 0
var wg sync.WaitGroup
for range 100 {
  wg.Add(1)
  go func() { defer wg.Done(); n++ }()
}
wg.Wait()
fmt.Println(n) // pode ser menos de 100

Exemplos

The counter is wrong because of a data race.

O contador está errado por causa de um data race.

Run the tests with -race to catch any data race.

Rode os testes com -race para pegar qualquer data race.

Cuidado

Não confunda com race condition lógica: duas goroutines podem se atropelar na ordem das ações sem haver acesso concorrente à mesma memória.

Sinônimos

corrida de dados

Veja também

Todos os termos de Go