Sobes.tech
Junior — Middle
79

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

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

Механизм Semaphore (семафор) используется для ограничения количества потоков, одновременно получающих доступ к определённому ресурсу или критической секции.

Целесообразно применять семафор, когда:

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

В iOS семафоры часто применяются для управления асинхронными задачами, например, чтобы дождаться завершения нескольких операций или ограничить количество одновременно выполняемых задач.

Пример использования DispatchSemaphore в Swift:

let semaphore = DispatchSemaphore(value: 3) // максимум 3 потока одновременно

func accessResource() {
    semaphore.wait() // уменьшаем счетчик, если 0 — поток блокируется
    // Работа с ресурсом
    print("Поток получил доступ")
    sleep(1) // имитация работы
    semaphore.signal() // увеличиваем счетчик, освобождая место
}

for _ in 1...10 {
    DispatchQueue.global().async {
        accessResource()
    }
}

В этом примере одновременно не более 3 потоков смогут работать с ресурсом.