Sobes.tech
Middle+

Šta će se desiti ako u AppDelegate-u u glavnom thread-u pozovete 'dispatchQueue.main.sync'?

sobes.tech АИ

Одговор од АИ

Doći će do Deadlock-a (međusobnog blokiranja).

Objašnjenje:

  1. AppDelegate radi na glavnom thread-u.
  2. dispatchQueue.main.sync pokušava da izvrši kod na glavnom thread-u sinhrono, tj. čeka da se blok završi.
  3. Ali glavni thread je već zauzet izvršavanjem AppDelegate i čeka da se blok u sync završi.
  4. Blok u sync ne može da počne jer je glavni thread zauzet čekanjem.

Ukratko, glavni thread čeka na završetak bloka, a blok čeka na oslobađanje glavnog thread-a — javlja se deadlock. Aplikacija će se zamrznuti.

Primer koda koji izaziva deadlock:

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

    // Ovaj poziv će izazvati deadlock
    DispatchQueue.main.sync {
        print("Ovaj kod nikada neće biti izvršen")
    }

    print("Ovaj kod takođe neće biti dostignut")

    return true
}