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 γίνεται από ένα background νήμα, επομένως δεν προκύπτει μπλοκάρισμα. Ο βασικός κανόνας είναι να μην καλείτε ποτέ DispatchQueue.main.sync από το κύριο νήμα.