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:
AppDelegateradi na glavnom thread-u.dispatchQueue.main.syncpokušava da izvrši kod na glavnom thread-u sinhrono, tj. čeka da se blok završi.- Ali glavni thread je već zauzet izvršavanjem
AppDelegatei čeka da se blok usynczavrši. - Blok u
syncne 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
}