Sobes.tech
Junior — Middle

Ako funguje blokovanie pri volaní metódy sync na sekvenčnej fronte?

sobes.tech AI

Odpoveď od AI

Keď zavoláte metódu sync na sériovej fronte v GCD (Grand Central Dispatch), aktuálny vlákno je zablokované, kým sa úloha odovzdaná do sync ne dokončí. Ak je sync volané z toho istého vlákna, ktoré obsluhuje túto frontu, vznikne deadlock, pretože fronta nemôže začať vykonávať novú úlohu, kým tá aktuálna neskončí, a aktuálne vlákno čaká na dokončenie novej úlohy.

Príklad:

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

serialQueue.sync {
    print("Vykonávam úlohu")
}
// Aktuálne vlákno je zablokované do dokončenia úlohy

Je dôležité nevolať sync na tej istej sériovej fronte z vnútra úlohy tejto fronty, aby sa predišlo vzájomnému zablokovaniu.