Sobes.tech
Junior — Middle

Μπορείς να απαριθμήσεις τους υπάρχοντες τύπους αμοιβαίας εξαίρεσης (mutex);

sobes.tech AI

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

Υπάρχουν διάφοροι τύποι mutex (αμοιβαίας αποκλεισμού) σε C/C++, οι οποίοι διαφέρουν στην υλοποίηση και τις δυνατότητές τους:

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

Στη βιβλιοθήκη standard C++11 υπάρχουν οι ακόλουθοι τύποι:

  • std::mutex
  • std::recursive_mutex
  • std::timed_mutex
  • std::recursive_timed_mutex

Παράδειγμα χρήσης του std::recursive_mutex:

#include <mutex>

std::recursive_mutex mtx;

void recursive_function(int count) {
    mtx.lock();
    if (count > 0) {
        recursive_function(count - 1);
    }
    mtx.unlock();
}

Η επιλογή του τύπου mutex εξαρτάται από την εργασία και τις απαιτήσεις κλειδώματος.