> Что делает dispatch_sync в GCD? (iOS, Swift)

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

Компании: Московская биржа, VK, Яндекс

Стек: iOS, Swift

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

dispatch_sync в GCD (Grand Central Dispatch) синхронно отправляет блок (замыкание) на указанную очередь и блокирует текущий поток до полного завершения выполнения этого блока. После завершения блока управление возвращается вызывающему коду.

Ключевые особенности:

  • Синхронность: текущий поток ждет, пока задача не выполнится.
  • Блокировка потока: если вызвать dispatch_sync из главного потока на главную очередь, произойдет взаимная блокировка (deadlock), так как очередь ждет освобождения потока, а поток ждет завершения задачи.
  • Использование: часто применяется для безопасного доступа к разделяемым ресурсам (например, через последовательную очередь) или для ожидания результата асинхронной операции.

Пример:

SWIFT
let serialQueue = DispatchQueue(label: "com.example.serial")
serialQueue.async {
// Долгая задача в фоне
}
serialQueue.sync {
// Синхронное ожидание: текущий поток заблокирован, пока этот блок не выполнится
print("Выполнено синхронно")
}
// Код ниже выполнится только после завершения sync-блока

Важно: избегайте вызова dispatch_sync на той же очереди, где уже выполняется код (особенно на главной), чтобы не вызвать deadlock.

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

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