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)
}