Sobes.tech
Junior — Middle

Millistel tingimustel ei põhjusta main.sync kasutamine vastastikust blokeeringut niitide vahel?

sobes.tech AI

Vastus AI-lt

DispatchQueue.main.sync kasutamine ei põhjusta vastastikust lukustamist (deadlock) ainult juhul, kui see kutsutakse välja mitte peamise niidi poolt. Kui te kutsute main.sync peamise niidi poolt, ootab see niit bloki lõpetamist, mis ei saa alata, kuna peamine niit on juba hõivatud — see põhjustab deadlocki.

Turvaline kasutusnäide:

DispatchQueue.global().async {
    DispatchQueue.main.sync {
        // UI uuendamine
    }
}

Siin toimub main.sync välise niidist, seega ei teki lukustust. Põhireegel on mitte kunagi kutsuda DispatchQueue.main.sync peamise niidist.