Пачка задач раздаётся нескольким воркерам через общий канал. Реализуйте fanOutSum: воркеры читают канал через range, суммируют, производитель закрывает канал, WaitGroup ждёт.
- Задача
- Решение
- Обсуждение
FanOutSum: воркеры на один канал
GolangРешение
func fanOutSum(tasks []int, workers int) int {
ch := make(chan int)
var wg sync.WaitGroup
var sum int64
for i := 0; i < workers; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for t := range ch {
atomic.AddInt64(&sum, int64(t))
}
}()
}
for _, t := range tasks {
ch <- t
}
close(ch)
wg.Wait()
return int(atomic.LoadInt64(&sum))
}