Junior — Middle
Можете ли објаснити како је реализована синхрона испорука задатака преко DispatchSync у GCD-у?
sobes.tech АИ
Одговор од АИ
DispatchSync u GCD (Grand Central Dispatch) implementira sinhrono slanje zadatka u red, blokirajući trenutnu nit dok se zadatak ne izvrši.
Kako to radi:
- Trenutna nit poziva
dispatch_syncsa zadatkom i redom. - Zadatak se postavlja u specificirani red.
- Trenutna nit se blokira i čeka na završetak zadatka.
- Nakon završetka zadatka, nit nastavlja sa radom.
Važno je napomenuti da ako pozovete dispatch_sync na istoj ruti na kojoj već radi kod, doći će do deadlock-a, jer zadatak ne može početi dok se trenutna nit ne odblokira.
Primer:
let queue = DispatchQueue(label: "com.example.queue")
queue.async {
print("Asinhroni zadatak")
queue.sync {
print("Sinhroni zadatak unutar asinhronog")
}
}
Ovde je dispatch_sync unutar async siguran, jer su to različiti nivoi izvršenja.
Na ovaj način, dispatch_sync obezbeđuje sinhrono izvršenje zadatka, blokirajući pozivnu nit do njegovog završetka.