Middle
Τι είναι ένα deadlock;
sobes.tech AI
Απάντηση από AI
Deadlock (αμοιβαίος αποκλεισμός) — είναι μια κατάσταση σε μια εφαρμογή πολλαπλών νημάτων όπου δύο ή περισσότερα νήματα μπλοκάρουν το ένα το άλλο, περιμένοντας να ελευθερώσουν πόρους που κατέχει το άλλο νήμα. Ως αποτέλεσμα, κανένα από τα νήματα δεν μπορεί να συνεχίσει.
Παράδειγμα κλασικής κατάστασης deadlock:
- Το νήμα A αποκτά τον πόρο 1 και περιμένει τον πόρο 2.
- Το νήμα B αποκτά τον πόρο 2 και περιμένει τον πόρο 1.
Τα δύο νήματα παραμένουν μπλοκαρισμένα επ' αόριστον.
Για την αποτροπή deadlock εφαρμόζονται:
- Αυστηρή σειρά στην απόκτηση πόρων.
- Χρονικά όρια (timeout) κατά την αναμονή για μπλοκαρίσματα.
- Χρήση μη μπλοκαριστικών αλγορίθμων.
Παράδειγμα σε Java:
synchronized(resource1) {
synchronized(resource2) {
// εργασία με τους πόρους
}
}
Αν ένα άλλο νήμα προσπαθεί να αποκτήσει τους πόρους με αντίστροφη σειρά, μπορεί να προκύψει deadlock.