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