Middle+
Əsas axında AppDelegate-də 'dispatchQueue.main.sync' çağırılırsa, nə baş verəcək?
sobes.tech Süni İntellekt
AI-dan cavab
Öz qarşılıqlı bloklama (Deadlock) baş verəcək.
İzah:
AppDelegateəsas iş parçacığında işləyir.dispatchQueue.main.synckodu sinxron olaraq əsas iş parçacığında icra etməyə çalışır, yəni blokun tamamlanmasını gözləyir.- Amma əsas iş parçacığı artıq
AppDelegate-in icrasında vəsyncblokunun tamamlanmasını gözləyir. syncblokunun başlaması mümkün deyil, çünki əsas iş parçacığı gözləməkdədir.
Qısaca, əsas iş parçacığı bloku tamamlamasını gözləyir, və blok əsas iş parçacığının sərbəst buraxılmasını gözləyir — bu, qarşılıqlı bloklanma (deadlock) yaradır. Tətbiq donacaq.
Deadlock-u törədən kod nümunəsi:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Tətbiq işə salındı")
// Bu çağırış deadlock-a səbəb olacaq
DispatchQueue.main.sync {
print("Bu kod heç vaxt icra olunmayacaq")
}
print("Bu kod da çatmayacaq")
return true
}