Junior — Middle
Πώς λειτουργεί το μπλοκάρισμα κατά την κλήση της μεθόδου sync σε μια σειριακή ουρά;
sobes.tech AI
Απάντηση από AI
Όταν καλείται η μέθοδος sync σε μια σειριακή ουρά στο GCD (Grand Central Dispatch), το τρέχον νήμα μπλοκάρεται μέχρι να ολοκληρωθεί η εργασία που περνάει στο sync. Αν το sync καλείται από το ίδιο νήμα που διαχειρίζεται αυτήν την ουρά, προκύπτει ένα deadlock, καθώς η ουρά δεν μπορεί να ξεκινήσει μια νέα εργασία μέχρι να ολοκληρωθεί η τρέχουσα, και το τρέχον νήμα περιμένει την ολοκλήρωση της νέας εργασίας.
Παράδειγμα:
let serialQueue = DispatchQueue(label: "com.paradeigma.serial")
serialQueue.sync {
print("Εκτέλεση εργασίας")
}
// Το τρέχον νήμα είναι μπλοκαρισμένο μέχρι να ολοκληρωθεί η εργασία
Είναι σημαντικό να μην καλείτε sync στην ίδια σειριακή ουρά από μέσα σε μια εργασία αυτής της ουράς, για να αποφύγετε αμοιβαία μπλοκαρίσματα.