Sobes.tech
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_sync sa 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.