Sobes.tech
Middle+

Was passiert, wenn im AppDelegate im Hauptthread 'dispatchQueue.main.sync' aufgerufen wird?

sobes.tech KI

Antwort von AI

Es kommt zu einem Deadlock (wechselseitige Blockierung).

Erklärung:

  1. AppDelegate läuft im Haupt-Thread.
  2. dispatchQueue.main.sync versucht, Code im Haupt-Thread synchron auszuführen, d.h. wartet auf Abschluss des Codeblocks.
  3. Aber der Haupt-Thread ist bereits mit der Ausführung von AppDelegate beschäftigt und wartet, bis der Block in sync beendet ist.
  4. Der Block in sync kann nicht starten, weil der Haupt-Thread mit Warten beschäftigt ist.

Kurz gesagt, der Haupt-Thread wartet auf den Abschluss des Blocks, und der Block wartet auf die Freigabe des Haupt-Threads — es entsteht ein Deadlock. Die Anwendung hängt.

Beispielcode, der einen Deadlock verursacht:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print("Anwendung gestartet")

    // Dieser Aufruf verursacht einen Deadlock
    DispatchQueue.main.sync {
        print("Dieser Code wird niemals ausgeführt")
    }

    print("Dieser Code wird auch nicht erreicht")

    return true
}