Sobes.tech
Junior — Middle

Hogyan működik a zárolás a sync módszer hívásakor egy szekvenciális sorban?

sobes.tech MI

Válasz az MI-től

Amikor a sync metódust hívjuk egy soros sorban a GCD-ben (Grand Central Dispatch), az aktuális szál blokkolva lesz, amíg a sync-hez átadott feladat be nem fejeződik. Ha a sync ugyanabból a szálból hívódik meg, amely ezt a sort kezeli, akkor deadlock keletkezik, mivel a sor nem kezdhet el egy új feladatot, amíg a jelenlegi be nem fejeződik, és az aktuális szál vár a új feladat befejezésére.

Példa:

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

serialQueue.sync {
    print("Feladat végrehajtása")
}
// Az aktuális szál blokkolva van a feladat befejezéséig

Fontos, hogy ne hívjuk meg a sync-et ugyanazon a soros soron belül egy feladatból, hogy elkerüljük a kölcsönös blokkolást.