Каждая задача несёт индекс, воркер пишет результат в свою ячейку. Реализуйте processIndexed: воркеры пишут results[j.idx] = j.val * 2.
- Задача
- Решение
- Обсуждение
ProcessIndexed: порядок через индексы
GolangРешение
func processIndexed(jobs []job, workers int) []int {
results := make([]int, len(jobs))
ch := make(chan job)
var wg sync.WaitGroup
for i := 0; i < workers; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for j := range ch {
results[j.idx] = j.val * 2
}
}()
}
for _, j := range jobs {
ch <- j
}
close(ch)
wg.Wait()
return results
}