Middle+
Ce se întâmplă dacă în AppDelegate pe thread-ul principal se apelează 'dispatchQueue.main.sync'?
sobes.tech AI
Răspuns de la AI
Se va produce un Deadlock (blocare mutuală).
Explicație:
AppDelegaterulează pe thread-ul principal.dispatchQueue.main.syncîncearcă să execute codul pe thread-ul principal sincron , adică așteaptă finalizarea blocului de cod.- Dar thread-ul principal este deja ocupat cu executarea
AppDelegateși așteaptă ca blocul dinsyncsă se termine. - Blocul din
syncnu poate începe pentru că thread-ul principal este ocupat așteptând.
Pe scurt, thread-ul principal așteaptă finalizarea blocului, iar blocul așteaptă eliberarea thread-ului principal — se produce un deadlock. Aplicația se va bloca.
Exemplu de cod care va cauza deadlock:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Aplicația a fost pornită")
// Această apel va cauza deadlock
DispatchQueue.main.sync {
print("Acest cod nu va fi niciodată executat")
}
print("Acest cod nu va fi atins")
return true
}