Junior — Middle
Kaip veikia blokavimas, kviečiant sync metodą eilės eilėje?
sobes.tech AI
Atsakymas iš AI
Kai kviečiate sync metodą serijinėje eilėje GCD (Grand Central Dispatch), dabartinis srautas yra užblokuotas, kol perduotas sync užduotis nebus užbaigta. Jei sync yra iškviestas iš to paties srauto, kuris aptarnauja šią eilę, įvyksta deadlock, nes eilė negali pradėti naujos užduoties, kol esama nebaigta, o dabartinis srautas laukia naujos užduoties pabaigos.
Pavyzdys:
let serialQueue = DispatchQueue(label: "com.pavyzdys.serial")
serialQueue.sync {
print("Užduoties vykdymas")
}
// Dabartinis srautas yra užblokuotas iki užduoties pabaigos
Svarbu nepaleisti sync toje pačioje serijinėje eilėje iš jos pačios užduoties, kad išvengtumėte tarpusavio užblokavimo.