Sobes.tech
Назад к вопросам
Junior — Middle
68

Как действует блокировка при вызове метода sync на последовательной очереди?

Компании, где спрашивали
GreenData

Ответ от нейросети

sobes.tech AI

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

Пример:

let serialQueue = DispatchQueue(label: "com.example.serial")

serialQueue.sync {
    print("Выполнение задачи")
}
// Текущий поток заблокирован до завершения задачи

Важно не вызывать sync на той же последовательной очереди изнутри задачи этой же очереди, чтобы избежать взаимной блокировки.