Sobes.tech
Junior — Middle

În ce condiții utilizarea main.sync nu va duce la blocarea reciprocă a firelor?

sobes.tech AI

Răspuns de la AI

Utilizarea DispatchQueue.main.sync nu va duce la blocare mutuală (deadlock) doar dacă apelul nu are loc din thread-ul principal. Dacă apelați main.sync din thread-ul principal, acel thread va aștepta finalizarea blocului, care nu poate începe deoarece thread-ul principal este deja ocupat — ceea ce cauzează un deadlock.

Exemplu de utilizare sigură:

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

Aici, apelul main.sync are loc dintr-un thread de fundal, deci nu apare blocarea. Regula principală este să nu apelați niciodată DispatchQueue.main.sync din thread-ul principal.