Sobes.tech
Junior — Middle

რის პირობებში main.sync-ის გამოყენება ურთიერთბლოკირებას არ გამოიწვევს?

sobes.tech AI

პასუხი AI-სგან

DispatchQueue.main.sync-ის გამოყენება მხოლოდ იმ შემთხვევაში არ გამოიწვევს ურთიერთბლოკირებას (deadlock), თუ ის არ ხორციელდება მთავარი ნაკადიდან. თუ თქვენ გამოიძახებთ main.sync-ს მთავარი ნაკადიდან, ეს ნაკადი ელოდება ბლოკის დასრულებას, რომელიც ვერ დაიწყება, რადგან მთავარი ნაკადი უკვე დაკავებულია — ეს გამოიწვევს deadlock-ს.

უსაფრთხო გამოყენების მაგალითი:

DispatchQueue.global().async {
    DispatchQueue.main.sync {
        // UI განახლება
    }
}

აქ, main.sync-ის გამოძახება ხდება ფონურ ნაკადზე, ამიტომ ბლოკირება არ ხდება. მთავარი წესი — არასოდეს გამოიძახოთ DispatchQueue.main.sync მთავარი ნაკადიდან.