Назад к вопросам
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 на той же последовательной очереди изнутри задачи этой же очереди, чтобы избежать взаимной блокировки.