Go · Intermediário · Inglês · Técnico
data race
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 100Exemplos
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