Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про IOS: deadlock, serial, queue

Как можно получить deadlock в serial queue?

Вопрос проверяет понимание deadlock и умение анализировать ошибки синхронизации в GCD.

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

Deadlock в serial queue возникает, когда очередь ждёт выполнения задачи, которая не может начаться.
Чаще всего это происходит при вызове sync на той же очереди.
Очередь занята текущей задачей и не может выполнить следующую.
В результате приложение зависает.

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

Deadlock — одна из самых частых и опасных ошибок при работе с GCD.

Определение

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

Классический пример deadlock

let queue = DispatchQueue(label: "com.app.serial")

queue.sync {
    queue.sync {
        // этот код никогда не выполнится
    }
}

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

Перед тем как перейти к перечислению, важно понять принцип работы serial queue.
Serial queue выполняет только одну задачу за раз.

  1. Внешний sync занимает очередь

  2. Внутренний sync ждёт освобождения очереди

  3. Очередь не может освободиться, пока не завершится текущая задача

Deadlock с main queue

Частый реальный пример:

DispatchQueue.main.sync {
    // deadlock
}

Если код уже выполняется на main thread, sync приводит к зависанию.

Краткий вывод

Deadlock в serial queue возникает при синхронном ожидании самой себя. Никогда не вызывай sync на той же очереди, в которой уже выполняешься.

  • Аватар

    iOS Guru

    Roman Isakov

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • IOS

    IOS

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

#deadlock

#serial

#queue

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

  • Аватар

    iOS Guru

    Roman Isakov

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