> Какие средства синхронизации потоков существуют: mutex, semaphore, NSLock (iOS, Swift)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: VK

Стек: iOS, Swift

> Пример ответа

В мобильной разработке на iOS с использованием Swift основными средствами синхронизации потоков являются:

  1. Mutex (взаимное исключение) - низкоуровневый примитив, который блокирует доступ к критической секции для всех потоков, кроме одного. В Swift используется через pthread_mutex_t или обёртку NSLock. Подходит для защиты коротких участков кода.

  2. Semaphore (семафор) - управляет доступом к ограниченному числу ресурсов. В iOS реализован через DispatchSemaphore. Позволяет ограничить количество одновременных потоков (например, не более 3 запросов к серверу).

  3. NSLock - высокоуровневая обёртка над mutex в Objective-C/Swift. Проста в использовании: lock() и unlock(). Не поддерживает рекурсивный захват (для этого есть NSRecursiveLock).

Дополнительно в iOS активно используются:

  • @synchronized - устаревший, но встречающийся в Objective-C коде.
  • DispatchQueue (GCD) - серийные очереди (serial) гарантируют последовательное выполнение задач, что часто заменяет явные блокировки.
  • OperationQueue с maxConcurrentOperationCount = 1.
  • os_unfair_lock - быстрый нерекурсивный mutex для низкоуровневой синхронизации.

Выбор зависит от задачи: для простой блокировки - NSLock, для контроля доступа к ресурсам - семафор, для асинхронных операций - GCD.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью