Sobes.tech
Junior — Middle

Kādās situācijās main.sync lietošana nesagādās savstarpēju bloķēšanu?

sobes.tech AI

Atbilde no AI

DispatchQueue.main.sync izmantošana nesagādās savstarpēju bloķēšanu (deadlock), ja tā tiek izsaukta ne no galvenā pavediena. Ja jūs izsaucat main.sync no galvenā pavediena, tas gaidīs, kamēr bloks tiks pabeigts, kas nevar sākties, jo galvenais pavediens jau ir aizņemts — tas novedīs pie deadlock.

Droša piemērs:

DispatchQueue.global().async {
    DispatchQueue.main.sync {
        // UI atjaunināšana
    }
}

Šeit main.sync tiek izsaukts no fonu pavediena, tāpēc nenotiek bloķēšana. Galvenā noteikuma ir nekad neizsaukt DispatchQueue.main.sync no galvenā pavediena.