Вопрос проверяет понимание базовых примитивов синхронизации и управления доступом к общим ресурсам.
Semaphore — это механизм синхронизации, который ограничивает количество потоков, одновременно выполняющих участок кода. Он работает на основе счётчика, который уменьшается при входе и увеличивается при выходе. Если счётчик равен нулю, поток ждёт. Semaphore часто используется в GCD для контроля параллелизма. Он помогает избежать гонок данных.
Semaphore применяется для управления конкурентным доступом к ресурсам и координации выполнения потоков.
Semaphore — это примитив синхронизации, основанный на целочисленном счётчике, который контролирует доступ к ресурсу.
Перед тем как перейти к шагам, важно понять, что semaphore не привязан к конкретному потоку.
Semaphore инициализируется числом
wait() уменьшает счётчик
Если счётчик равен нулю — поток блокируется
signal() увеличивает счётчик и разблокирует ожидающий поток
let semaphore = DispatchSemaphore(value: 2)
semaphore.wait()
// критическая секция
semaphore.signal()
Ограничение количества параллельных задач
Защита общих ресурсов
Синхронизация асинхронных операций
Semaphore полезен, когда нужно контролировать уровень параллелизма. Однако его следует использовать аккуратно, чтобы не создать deadlock.