Sobes.tech
Junior — Middle+
74

Установить максимум одновременно запущенных вызовов функции printNumber

Компании, где спрашивали:

Ecom.tech
Условие задачи

Модифицируйте программу так, чтобы одновременно выполнялось не более трёх вызовов функции printNumber.

package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    var wg sync.WaitGroup
    sem := make(chan struct{}, 3) // семафор, ограничивающий количество одновременных вызовов

    for idx := 0; idx < 10; idx++ {
        wg.Add(1)
        go func(n int) {
            defer wg.Done()
            sem <- struct{}{}   // захватываем слот
            printNumber(n)
            <-sem               // освобождаем слот
        }(idx)
    }

    wg.Wait()
}

func printNumber(num int) {
    time.Sleep(time.Second)
    fmt.Println(num)
}