Middle+
Ի՞նչ կլինի, եթե AppDelegate-ում գլխավոր հոսքում կանչեք 'dispatchQueue.main.sync'-ը։
sobes.tech AI
Պատասխան AI-ից
Կատարվում է փոխադարձ փակման (Deadlock)։
Ներկայացում:
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
}