Sobes.tech
Middle+

Co se stane, pokud v AppDelegate v hlavním vlákně zavoláte 'dispatchQueue.main.sync'?

sobes.tech AI

Odpověď od AI

Vznikne Deadlock (vzájemné blokování).

Vysvětlení:

  1. AppDelegate běží na hlavním vlákně.
  2. dispatchQueue.main.sync se pokouší spustit kód na hlavním vlákně synchronně, tj. čeká na dokončení bloku kódu.
  3. Ale hlavní vlákno je již zabráno vykonáváním AppDelegate a čeká, až blok v sync skončí.
  4. Blok v sync nemůže začít, protože hlavní vlákno je zaneprázdněno čekáním.

Stručně řečeno, hlavní vlákno čeká na dokončení bloku, a blok čeká na uvolnění hlavního vlákna — vzniká deadlock. Aplikace se zasekne.

Příklad kódu, který způsobí deadlock:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print("Aplikace spuštěna")

    // Tato volání způsobí deadlock
    DispatchQueue.main.sync {
        print("Tento kód se nikdy nevykoná")
    }

    print("Tento kód také nebude dosažen")

    return true
}