Sobes.tech
Назад к вопросам
Junior — Middle
81

В каких сценариях используют механизм Semaphore для синхронизации потоков или процессов?

Компании, где спрашивали
Астрал-Софт

Ответ от нейросети

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 горутин одновременно выполняют работу.