Junior — Middle
Kuidas töötab lukustus, kui kutsutakse välja sync meetod järjestikuses järjekorras?
sobes.tech AI
Vastus AI-lt
Kui kutsute GCD (Grand Central Dispatch) järjestikuse järjekorra sync meetodit, blokeeritakse praegune niit kuni sync-le antud ülesanne on lõpetatud. Kui sync kutsutakse samast niidist, mis haldab seda järjekorda, tekib deadlock, kuna järjekord ei saa alustada uut ülesannet enne, kui olemasolev on lõpetatud, ja praegune niit ootab uue ülesande lõpetamist.
Näide:
let serialQueue = DispatchQueue(label: "com.näide.serial")
serialQueue.sync {
print("Ülesande täitmine")
}
// Praegune niit on blokeeritud kuni ülesande lõpetamiseni
Oluline on mitte kutsuda sync-i samasse seriali järjekorda seestpoolt selle järjekorra ülesandest, et vältida vastastikuseid lukke.