Sobes.tech
Junior — Middle

Чӣ тавр блокировка дар вақти даъвати усули sync дар навбати пайдарпай кор мекунад?

sobes.tech AI

Ҷавоб аз AI

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

Пример:

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

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

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