• Задача
  • Решение
  • Обсуждение

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
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

00:00:00
Наш сайт собирает куки. Чтобы тебе было удобнее им пользоваться. Нажимая на кнопку, ты даёшь разрешение собирать куки