Sobes.tech
Middle+

Que se passera-t-il si dans AppDelegate sur le thread principal on appelle 'dispatchQueue.main.sync' ?

sobes.tech IA

Réponse de l'IA

Un deadlock (blocage mutuel) se produira.

Explication:

  1. AppDelegate fonctionne sur le thread principal.
  2. dispatchQueue.main.sync tente d'exécuter du code sur le thread principal synchroniquement, c'est-à-dire en attendant la fin de l'exécution du bloc.
  3. Mais le thread principal est déjà occupé à exécuter AppDelegate et attend que le bloc dans sync se termine.
  4. Le bloc dans sync ne peut pas commencer à s'exécuter car le thread principal est occupé à attendre.

En résumé, le thread principal attend la fin du bloc, et le bloc attend que le thread principal soit libre — un deadlock se produit. L'application se bloquera.

Exemple de code qui provoquera un deadlock:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print("Application démarrée")

    // Cet appel provoquera un deadlock
    DispatchQueue.main.sync {
        print("Ce code ne sera jamais exécuté")
    }

    print("Ce code ne sera pas atteint non plus")

    return true
}