Семафор — это примитив синхронизации потоков, который управляет доступом к ограниченному ресурсу. Он поддерживает целочисленный счётчик.
Основные операции:
wait() (или P / acquire): Уменьшает счётчик на 1. Если счётчик становится отрицательным, поток блокируется до тех пор, пока другой поток не выполнит signal().signal() (или V / release): Увеличивает счётчик на 1. Если есть заблокированные потоки, один из них разблокируется.Типы семафоров:
Пример использования на Swift для ограничения количества одновременно работающих задач:
swift