Back to questions
Junior — Middle
80
В каких сценариях используют механизм Semaphore для синхронизации потоков или процессов?
Companies where asked
Астрал-Софт
Answer from AI
sobes.tech AI
Механизм Semaphore используется для управления доступом к ограниченному числу ресурсов в многопоточных или многопроцессных приложениях. Он позволяет ограничить количество потоков, которые могут одновременно выполнять определённый участок кода или использовать ресурс.
Сценарии использования:
- Ограничение количества одновременных подключений к базе данных.
- Контроль доступа к пулу потоков или соединений.
- Синхронизация потоков при выполнении задач, где одновременно может работать только фиксированное число исполнителей.
Пример в Go:
var sem = make(chan struct{}, 3) // максимум 3 одновременных доступа
func worker(id int) {
sem <- struct{}{} // захват семафора
fmt.Printf("Worker %d started\n", id)
time.Sleep(time.Second) // работа
fmt.Printf("Worker %d finished\n", id)
<-sem // освобождение семафора
}
func main() {
for i := 0; i < 10; i++ {
go worker(i)
}
time.Sleep(5 * time.Second)
}
В этом примере не более 3 горутин одновременно выполняют работу.