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
}