Код демонстрирует реализацию семафора в Go с использованием буферизованного канала. Семафор создается с емкостью 10, что позволяет иметь максимум 10 одновременных процессов. Функция main итерирует 1000 раз, отправляя целое число в канал семафора в каждой итерации. Если канал полон, цикл блокируется до тех пор, пока не будет освобождено значение из канала. Новая горутина запускается для каждой итерации, которая печатает сообщение о начале и затем спит на случайную длительность между 0 и 20 секундами. Когда горутина завершается, она освобождает значение из канала семафора, делая его доступным для следующей итерации. Освобождение значения происходит с помощью оператора `<- sem`, который также извлекает оригинальное значение, отправленное в канал. Программа печатает сообщения начала и конца для каждого процесса, включая идентификатор процесса и длительность, за которое он был выполнен. Вывод показывает, что процессы выполняются параллельно, с максимумом 10 процессов, работающих одновременно. Программа использует пакеты `time` и `math/rand` для введения случайности в длительность сна.
dev.to
Implement semaphore in golang by buffered channel
Create attached notes ...
