Middle+
Čo sa stane, ak v AppDelegate v hlavnom vlákne zavoláte 'dispatchQueue.main.sync'?
sobes.tech AI
Odpoveď od AI
Vznikne Deadlock (vzájomné blokovanie).
Vysvetlenie:
AppDelegatebeží na hlavnom vlákne.dispatchQueue.main.syncsa pokúša vykonať kód na hlavnom vlákne synchronne, teda čaká na dokončenie bloku.- No hlavné vlákno je už zaneprázdnené vykonávaním
AppDelegatea čaká, kým sa blok vsyncneskončí. - Blok v
syncnemôže začať, pretože hlavné vlákno je zaneprázdnené čakaním.
Stručne povedané, hlavné vlákno čaká na dokončenie bloku, a blok čaká na uvoľnenie hlavného vlákna — vzniká deadlock. Aplikácia sa zasekne.
Príklad kódu, ktorý spôsobí deadlock:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Aplikácia spustená")
// Tento volanie spôsobí deadlock
DispatchQueue.main.sync {
print("Tento kód sa nikdy nevykoná")
}
print("Tento kód tiež nebude dosiahnutý")
return true
}