Sobes.tech
Junior — Middle

Как работи блокирането при извикване на метода sync в последователна опашка?

sobes.tech AI

Отговор от AI

Когато се извика методът sync върху сериен опашка в GCD (Grand Central Dispatch), текущият поток се блокира, докато задачата, предадена на sync, не бъде завършена. Ако sync се извика от същия поток, който обслужва тази опашка, възниква deadlock, тъй като опашката не може да започне изпълнението на нова задача, докато текущата не приключи, а текущият поток чака завършването на новата задача.

Пример:

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

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

Важно е да не се извиква sync върху същата сериална опашка от вътре в задача на тази опашка, за да се избегне взаимно блокиране.