Junior — Middle
77
В каких ситуациях целесообразно применять механизм 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 потоков смогут работать с ресурсом.