Sobes.tech
Middle

Τι είναι ένα deadlock;

sobes.tech AI

Απάντηση από AI

Deadlock (αμοιβαίος αποκλεισμός) — είναι μια κατάσταση σε μια εφαρμογή πολλαπλών νημάτων όπου δύο ή περισσότερα νήματα μπλοκάρουν το ένα το άλλο, περιμένοντας να ελευθερώσουν πόρους που κατέχει το άλλο νήμα. Ως αποτέλεσμα, κανένα από τα νήματα δεν μπορεί να συνεχίσει.

Παράδειγμα κλασικής κατάστασης deadlock:

  • Το νήμα A αποκτά τον πόρο 1 και περιμένει τον πόρο 2.
  • Το νήμα B αποκτά τον πόρο 2 και περιμένει τον πόρο 1.

Τα δύο νήματα παραμένουν μπλοκαρισμένα επ' αόριστον.

Για την αποτροπή deadlock εφαρμόζονται:

  • Αυστηρή σειρά στην απόκτηση πόρων.
  • Χρονικά όρια (timeout) κατά την αναμονή για μπλοκαρίσματα.
  • Χρήση μη μπλοκαριστικών αλγορίθμων.

Παράδειγμα σε Java:

synchronized(resource1) {
    synchronized(resource2) {
        // εργασία με τους πόρους
    }
}

Αν ένα άλλο νήμα προσπαθεί να αποκτήσει τους πόρους με αντίστροφη σειρά, μπορεί να προκύψει deadlock.