LimitedProcess: семафор на канале
Миша ограничивает одновременные экспорты семафором на канале. Реализуйте limitedProcess: обработайте элементы в горутинах, но одновременно — не больше limit (семафор make(chan struct{}, limit)).
Показать решение
GolangРешение
func limitedProcess(items []int, limit int, fn func(int) int) []int {
sem := make(chan struct{}, limit)
results := make([]int, len(items))
var wg sync.WaitGroup
for i, it := range items {
wg.Add(1)
go func(i, it int) {
defer wg.Done()
sem <- struct{}{}
results[i] = fn(it)
<-sem
}(i, it)
}
wg.Wait()
return results
}Записаться на разбор
10 000 ₽ · 60 минут · онлайн