Algum tempo atrás, publicamos um post aqui no blog explicando como resolver race condition utilizando mutex e channels.
Embora o conteúdo daquele post continue sendo válido, para alguns casos mais simples de race condition, como por exemplo o do post, podemos utilizar o package sync/atomic
para nos auxiliar.
Para dar o ponta pé inicial, vamos escrever um código que não irá funcionar corretamente por haver race condition.
package main import ( "fmt" "sync" ) func main() { var total int64 var wg sync.WaitGroup for i := 0; i < 50; i++ { wg.Add(1) go func() { for c := 0; c < 1000; c++ { total += int64(c) } wg.Done() }() } wg.Wait() fmt.Println(total) }Leia mais »