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.