Sobes.tech
Junior — Middle

Μπορείτε να εξηγήσετε την αρχή λειτουργίας του mutex και τη χρήση του σε πολυνηματικά προγράμματα;

sobes.tech AI

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

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

Αρχή λειτουργίας:

  • Το νήμα προσπαθεί να αποκτήσει το mutex πριν εισέλθει στην κρίσιμη ενότητα.
  • Αν το mutex είναι ελεύθερο, το νήμα αποκτά πρόσβαση και συνεχίζει.
  • Αν το mutex είναι κατειλημμένο από άλλο νήμα, το τρέχον νήμα μπλοκάρεται και περιμένει να απελευθερωθεί.
  • Μετά το τέλος της εργασίας με τον πόρο, το νήμα απελευθερώνει το mutex, επιτρέποντας σε άλλα νήματα να συνεχίσουν.

Στη Go, αυτό υλοποιείται μέσω του τύπου sync.Mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()         // κλείδωμα mutex
    counter++         // κρίσιμη ενότητα
    mu.Unlock()       // ξεκλείδωμα mutex
}

Η χρήση mutex αποτρέπει καταστάσεις αγώνα και διασφαλίζει την ορθότητα των δεδομένων κατά την παράλληλη εκτέλεση.