Middle+
Agar AppDelegate'da asosiy oqimda 'dispatchQueue.main.sync' chaqirilsa nima bo'ladi?
sobes.tech AI
AIdan javob
Deadlock (o'zaro bloklanish) yuz beradi.
Tushuntirish:
AppDelegateasosiy oqimda ishlaydi.dispatchQueue.main.synckodni sinxron tarzda asosiy oqimda bajarishga harakat qiladi, ya'ni blok bajarilishi tugashini kutadi.- Ammo asosiy oqim allaqachon
AppDelegateni bajarishda vasyncblokining tugashini kutmoqda. syncblok boshlanishi mumkin emas, chunki asosiy oqim kutmoqda.
Qisqacha aytganda, asosiy oqim blokni bajarilishini kutmoqda, va blok esa asosiy oqim erkin bo'lishini kutmoqda — bu o'zaro bloklanishga olib keladi. Dastur to'xtab qoladi.
Deadlockni keltirib chiqaradigan kod misoli:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Dastur ishga tushdi")
// Bu chaqiruv Deadlockga olib keladi
DispatchQueue.main.sync {
print("Bu kod hech qachon bajarilmaydi")
}
print("Bu kod ham yetib borilmaydi")
return true
}