Sobes.tech
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:

  1. AppDelegate əsas iş parçacığında işləyir.
  2. dispatchQueue.main.sync kodu sinxron olaraq əsas iş parçacığında icra etməyə çalışır, yəni blokun tamamlanmasını gözləyir.
  3. Amma əsas iş parçacığı artıq AppDelegate-in icrasında və sync blokunun tamamlanmasını gözləyir.
  4. sync blokunun 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
}