Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про IOS: nslock, semaphore, mutex

Чем NSLock отличается от semaphore?

Вопрос проверяет понимание различий между высокоуровневыми и низкоуровневыми примитивами синхронизации в iOS.

Короткий ответ

NSLock — это объектная обёртка над mutex, предназначенная для взаимного исключения. Semaphore — более универсальный примитив, работающий на основе счётчика. NSLock всегда пускает только один поток в критическую секцию, semaphore может пускать несколько. NSLock проще и безопаснее для защиты данных. Semaphore чаще используется для координации потоков и ограничения параллелизма.

Длинный ответ

Хотя NSLock и DispatchSemaphore часто применяются для похожих задач, они решают их на разных уровнях абстракции и с разной семантикой.

Определение

NSLock — это объект синхронизации, обеспечивающий взаимное исключение доступа к ресурсу одним потоком.

NSLock: особенности и поведение

Перед списком важно понимать, что NSLock концептуально — это mutex.

  1. В критическую секцию может войти только один поток

  2. Поток, захвативший lock, обязан его освободить

  3. Поддерживает методы lock(), unlock(), try()

  4. Предназначен именно для защиты общих данных

let lock = NSLock()

lock.lock()
// работа с общими данными
lock.unlock()

Semaphore: ключевые отличия

Semaphore работает иначе и решает более широкий круг задач.

  1. Основан на счётчике, а не на владении

  2. Может пускать несколько потоков одновременно

  3. signal() может быть вызван другим потоком

  4. Используется для ограничения количества задач или ожидания событий

let semaphore = DispatchSemaphore(value: 3)

Когда выбирать каждый инструмент

  • NSLock:

    • защита состояния объектов

    • работа с разделяемыми данными

    • простой и понятный сценарий

  • Semaphore:

    • ограничение параллельных операций

    • ожидание завершения асинхронной задачи

    • координация нескольких очередей

Вывод

NSLock — правильный выбор для защиты данных. Semaphore — мощный, но более опасный инструмент, который стоит использовать только при необходимости управления параллелизмом.

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • IOS

    IOS

Ключевые слова

#nslock

#semaphore

#mutex

Подпишись на iOS Developer в телеграм

  • Аватар

    iOS Guru

    Roman Isakov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.