Middle+
Агар дар AppDelegate дар нахустин ҷараён 'dispatchQueue.main.sync' даъват карда шавад, чӣ мешавад?
sobes.tech AI
Ҷавоб аз AI
Маъзурият (взаимная блокировка) пайда бўлади.
Тушунтириш:
AppDelegateасосий тўпда ишлайди.dispatchQueue.main.syncкодни синхрон равишда асосий тўпда ишга туширишга уринади, яъни, блокнинг якунланишини кутмоқда.- Лекин асосий тўп ёзиб қўйилган
AppDelegateни ишга туширмоқда ваsyncдаги блок якунланишини кутмоқда. syncдаги блок бошланмайди, чунки асосий тўп кутмоқда.
Қисқача айтганда, асосий тўп блок якунланишини кутмоқда, ва блок асосий тўпнинг эркин бўлишини кутмоқда — бу ўзаро блокировка (deadlock) юзага келади. Тўғри, дастур тўхтаб қолади.
Deadlockни олиб келадиган код мисоли:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Дастур ишга туширилди")
// Бу чақирув deadlockга олиб келади
DispatchQueue.main.sync {
print("Бу код ҳеч қачон ишга тушмайди")
}
print("Бу код ҳам етиб бормайди")
return true
}