Sobes.tech
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
}