Sobes.tech
Junior — Middle

Kako funkcioniše blokada prilikom poziva metode sync na sekvencijalnoj redi?

sobes.tech АИ

Одговор од АИ

Kada pozovete metodu sync na serijskoj redi u GCD (Grand Central Dispatch), trenutni tok se blokira dok se zadatak dat sync ne završi. Ako se sync pozove iz istog toka koji upravlja tom redom, dolazi do deadlock-a, jer red ne može započeti izvršavanje novog zadatka dok trenutni ne završi, a trenutni tok čeka završetak novog zadatka.

Primer:

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

serialQueue.sync {
    print("Izvršavanje zadatka")
}
// Trenutni tok je blokiran do završetka zadatka

Važno je ne pozivati sync na istoj serijskoj redi iznutra zadatka te redi, kako bi se izbegli međusobni blokovi.