Junior — Senior
Контроль количества одновременных запусков функции printNumber без её изменения
livecode
Aufgabenbedingung
Необходимо реализовать ограничитель, который не позволит функции 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
}