Исправьте гонку: Add должен стоять до запуска горутины. Реализуйте processAll(files []int) int: суммируйте значения в горутинах, где wg.Add(1) перед go, а внутри — только defer wg.Done().
- Задача
- Решение
- Обсуждение
ProcessAll: Add до go
GolangРешение
func processAll(files []int) int {
var wg sync.WaitGroup
var sum int64
for _, f := range files {
wg.Add(1)
go func(f int) {
defer wg.Done()
atomic.AddInt64(&sum, int64(f))
}(f)
}
wg.Wait()
return int(atomic.LoadInt64(&sum))
}