Junior — Middle
Τι είναι ο αδιέξοδος πόρων και σε ποιες καταστάσεις εμφανίζεται στα συστήματα;
sobes.tech AI
Απάντηση από AI
Ο deadlock (αδιέξοδο) είναι μια κατάσταση στα συστήματα πολλαπλών εργασιών όπου δύο ή περισσότεροι διαδικασίες (ή νήματα) μπλοκάρουν η μία την άλλη για πάντα, περιμένοντας να ελευθερώσουν πόρους που κατέχουν η μία την άλλη.
Εμφανίζεται όταν πληρούνται ταυτόχρονα και οι τέσσερις συνθήκες:
- Αμοιβαία εξαίρεση — ένας πόρος μπορεί να κατέχεται μόνο από μία διαδικασία τη φορά.
- Κράτηση και αναμονή — μια διαδικασία κρατάει έναν πόρο και περιμένει έναν άλλο.
- Αδυναμία αναγκαστικής απελευθέρωσης — ένας πόρος δεν μπορεί να αφαιρεθεί από μια διαδικασία μέχρι να τον ελευθερώσει εθελοντικά.
- Κυκλική αναμονή — υπάρχει ένας κύκλος διαδικασιών, καθεμία από τις οποίες περιμένει έναν πόρο που κατέχεται από την επόμενη στη σειρά.
Παράδειγμα: η διαδικασία A έχει κρατήσει τον πόρο 1 και περιμένει τον πόρο 2, ενώ η διαδικασία B έχει κρατήσει τον πόρο 2 και περιμένει τον πόρο 1 — και οι δύο είναι μπλοκαρισμένοι για πάντα.
Σε iOS και άλλα συστήματα, οι deadlocks συχνά εμφανίζονται λόγω λανθασμένης χρήσης συγχρονισμού, π.χ., κατά την απόκτηση πολλαπλών κλειδώσεων σε διαφορετική σειρά.
Για την αποτροπή deadlocks, χρησιμοποιούνται:
- η ταξινόμηση της απόκτησης πόρων;
- χρονόμετρα αναμονής;
- αποφυγή διατήρησης πόρων ενώ περιμένουν άλλους;
- η χρήση εξειδικευμένων μηχανισμών συγχρονισμού.