Sobes.tech
Junior

Ποια είναι η διαφορά μεταξύ ενός mutex και ενός semaphore;

sobes.tech AI

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

Ένα mutex είναι ένας δυαδικός σημαφόρος που είναι είτε ελεύθερος (τιμή 1) είτε κατειλημμένος (τιμή 0). Χρησιμοποιείται για την προστασία κρίσιμων τμημάτων και διασφαλίζει αποκλειστική πρόσβαση σε πόρο. Μόνο το νήμα που έχει αποκτήσει το mutex μπορεί να το ελευθερώσει.

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

Βασικές διαφορές:

  • Σκοπός: Mutex για την προστασία κρίσιμων τμημάτων, Σημαφόρος για τη διαχείριση πρόσβασης σε πόρους.
  • Τιμή: Mutex (0 ή 1), Σημαφόρος (οποιαδήποτε μη αρνητική τιμή).
  • Κτήση: Το mutex έχει ιδιοκτήτη (το νήμα που το έχει αποκτήσει), ο Σημαφόρος δεν έχει σαφές ιδιοκτησιακό καθεστώς.
  • Ποιος μπορεί να το ελευθερώσει: Μόνο ο ιδιοκτήτης μπορεί να το ελευθερώσει στο mutex, οποιοδήποτε νήμα μπορεί να το ελευθερώσει στον σημαφόρο.
#include <mutex> // Για std::mutex
#include <semaphore> // Για std::counting_semaphore

std::mutex mtx; // Μutex για την προστασία πόρου

void critical_section() {
    mtx.lock(); // Απόκτηση mutex
    // Πρόσβαση στον κοινό πόρο
    mtx.unlock(); // Απελευθέρωση mutex
}

// Σημαφόρος για διαχείριση πρόσβασης σε 5 πόρους
std::counting_semaphore<5> sem(5);

void access_resource() {
    sem.acquire(); // Απόκτηση πόρου (μείωση μετρητή)
    // Χρήση πόρου
    sem.release(); // Απελευθέρωση πόρου (αύξηση μετρητή)
}

Σύγκριση σε πίνακα:

Χαρακτηριστικό Mutex Σημαφόρος
Τύπος Αντικείμενο συγχρονισμού (δυαδικός σημαφόρος) Αντικείμενο συγχρονισμού (μετρητής)
Τιμή 0 (κατειλημμένο), 1 (ελεύθερο) Μη αρνητικός αριθμός
Σκοπός Προστασία κρίσιμων τμημάτων, αποκλειστική πρόσβαση Διαχείριση πρόσβασης σε περιορισμένους πόρους
Ιδιοκτησία Έχει ιδιοκτήτη (το νήμα που το έχει αποκτήσει) Δεν έχει σαφές ιδιοκτησιακό καθεστώς
Ποιος μπορεί να το ελευθερώσει Μόνο ο ιδιοκτήτης Οποιοδήποτε νήμα