DispatchSemaphoreDispatchSemaphore — это примитив синхронизации потоков, который контролирует, сколько потоков может одновременно обращаться к общему ресурсу. Он содержит внутренний счётчик, который определяет, могут ли потоки продолжать работу или должны ждать.
Семафор работает через два основных метода:
wait() — уменьшает счётчик; если счётчик достигает нуля, вызывающий поток блокируется до тех пор, пока счётчик снова не увеличитсяsignal() — увеличивает счётчик, разблокируя любой ожидающий потокlet semaphore = DispatchSemaphore(value: 3) // Разрешить до 3 одновременных доступов
semaphore.wait() // Получить доступ
// ... выполнить работу ...
semaphore.signal() // Освободить доступ
0)wait() на главном потоке — это блокирует UI и может привести к зависанию приложения или срабатыванию watchdog-таймераwait() сопровождается соответствующим signal(), даже в ветках обработки ошибок, чтобы избежать дедлоковNSLock или serial DispatchQueue — с ними сложнее допустить ошибкуНачальный параметр value в DispatchSemaphore(value: n) устанавливает счётчик на n, то есть семафор, инициализированный с value: 3, позволит ровно 3 потокам пройти дальше, прежде чем следующий вызов wait() заблокируется.
Новый — ещё не проверен сообществом
Вы