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 » 