Sobes.tech
Middle+

Ce se întâmplă dacă în AppDelegate pe thread-ul principal se apelează 'dispatchQueue.main.sync'?

sobes.tech AI

Răspuns de la AI

Se va produce un Deadlock (blocare mutuală).

Explicație:

  1. AppDelegate rulează pe thread-ul principal.
  2. dispatchQueue.main.sync încearcă să execute codul pe thread-ul principal sincron , adică așteaptă finalizarea blocului de cod.
  3. Dar thread-ul principal este deja ocupat cu executarea AppDelegate și așteaptă ca blocul din sync să se termine.
  4. Blocul din sync nu poate începe pentru că thread-ul principal este ocupat așteptând.

Pe scurt, thread-ul principal așteaptă finalizarea blocului, iar blocul așteaptă eliberarea thread-ului principal — se produce un deadlock. Aplicația se va bloca.

Exemplu de cod care va cauza deadlock:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print("Aplicația a fost pornită")

    // Această apel va cauza deadlock
    DispatchQueue.main.sync {
        print("Acest cod nu va fi niciodată executat")
    }

    print("Acest cod nu va fi atins")

    return true
}