Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про IOS: deadlock, concurrency, synchronization

Что такое deadlock и как он возникает?

Вопрос проверяет понимание критических ошибок многопоточности и умение их предотвращать.

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

Deadlock — это ситуация, когда потоки навсегда ждут друг друга. Каждый поток удерживает ресурс и ожидает освобождения другого. В результате выполнение останавливается. Deadlock чаще всего возникает из-за неправильной синхронизации. Это одна из самых опасных ошибок многопоточности.

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

Deadlock — это логическая ошибка, при которой несколько потоков или очередей оказываются в состоянии взаимной блокировки.

Определение

Deadlock — это состояние системы, в котором дальнейшее выполнение невозможно из-за циклического ожидания ресурсов.

Классический сценарий

Перед перечислением важно понимать, что deadlock не лечится автоматически.

  1. Поток A захватывает ресурс X

  2. Поток B захватывает ресурс Y

  3. Поток A ждёт ресурс Y

  4. Поток B ждёт ресурс X

  5. Ни один поток не может продолжить выполнение

Пример с GCD

Один из самых распространённых случаев в iOS — блокировка главной очереди.

DispatchQueue.main.sync {
    // deadlock, если вызывается с main thread
}

Почему это происходит:

  • sync блокирует текущий поток

  • Главная очередь ждёт завершения блока

  • Блок не может начаться, потому что поток уже заблокирован

Частые причины deadlock

  • Вложенные sync вызовы

  • Неправильный порядок захвата locks

  • Использование semaphore без signal()

  • Блокировка главной очереди

Как избегать

  • Не вызывать sync на текущей очереди

  • Соблюдать единый порядок захвата ресурсов

  • Минимизировать использование locks

  • Использовать async вместо sync

Вывод

Deadlock — критическая ошибка, полностью останавливающая выполнение. Грамотная архитектура и аккуратная синхронизация — ключ к её предотвращению.

  • Аватар

    iOS Guru

    Roman Isakov

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • IOS

    IOS

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

#deadlock

#concurrency

#synchronization

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

  • Аватар

    iOS Guru

    Roman Isakov

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