Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
4
Контроль количества одновременных запусков функции printNumber без её изменения
Компании, где спрашивали:
Ecom.tech
Условие задачи
Необходимо реализовать ограничитель, который не позволит функции printNumber выполняться более пяти раз одновременно, при этом саму функцию менять нельзя.
package main
import (
"fmt"
"sync"
"time"
)
func main() {
wgGroup := sync.WaitGroup{}
sem := make(chan struct{}, 5)
for idx := 0; idx < 10; idx++ {
wgGroup.Add(1)
go func(num int) {
defer wgGroup.Done()
printNumber(sem, num)
}(idx)
}
wgGroup.Wait()
close(sem)
}
func printNumber(ch chan struct{}, n int) {
ch <- struct{}{}
time.Sleep(time.Second)
fmt.Println(n)
<-ch
}