Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Swift : threading, lock, synchronization

NSLock — это рекурсивный лок или обычный? Чем они отличаются?

Вопрос проверяет понимание типов блокировок и их поведения в многопоточной среде.

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

NSLock — это нерекурсивный лок. Если поток попытается захватить его повторно, это приведет к deadlock. Для рекурсивных блокировок используйте NSRecursiveLock.

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

1. Обычный NSLock:

  • Запрещает повторный захват одним потоком.

  • Пример deadlock:

    let lock = NSLock()
    lock.lock()
    lock.lock()  // Deadlock! Поток заблокирует сам себя.

2. NSRecursiveLock:

  • Позволяет многократный захват одним потоком.

  • Пример:

    let recursiveLock = NSRecursiveLock()
    func recursiveMethod(_ count: Int) {
        recursiveLock.lock()
        defer { recursiveLock.unlock() }
        if count > 0 { recursiveMethod(count - 1) }
    }

Вывод:
Используйте NSRecursiveLock для рекурсивных вызовов, иначе — NSLock.

  • Аватар

    iOS Guru

    Roman Isakov

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

Уровень

  • Рейтинг:

    2

  • Сложность:

    4

Навыки

  • Swift

    Swift

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

#threading

#lock

#synchronization

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

  • Аватар

    iOS Guru

    Roman Isakov

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