Ποιοι τύποι mutex υπάρχουν στη βιβλιοθήκη standard της C++;
sobes.tech AI
Απάντηση από AI
Στη βιβλιοθήκη standard της C++ (από την C++11 και μετά) ορίζονται οι ακόλουθοι τύποι mutex:
-
std::mutex: Βασικό, μη αναδρομικό mutex. Ένα νήμα που το κατέχει δεν μπορεί να το αποκτήσει ξανά χωρίς να το απελευθερώσει πρώτα. Η προσπάθεια επανακατάκτησής του από το ίδιο νήμα οδηγεί σε μη ορισμένη συμπεριφορά. -
std::recursive_mutex: Αναδρομικό mutex. Επιτρέπει σε ένα νήμα να το κατακτήσει πολλές φορές. Ο αριθμός των κατακτήσεων και των απελευθερώσεων πρέπει να ταιριάζουν ώστε το mutex να είναι διαθέσιμο σε άλλα νήματα. Αυξάνει το κόστος σε σύγκριση με τοstd::mutex. -
std::timed_mutex: Το ίδιο με τοstd::mutex, αλλά με τη δυνατότητα να προσπαθήσει κανείς να το κατακτήσει με χρονικό όριο (try_lock_for,try_lock_until). Χρησιμοποιείται για την αποφυγή αμοιβαίων αποκλεισμών σε ορισμένες περιπτώσεις. -
std::recursive_timed_mutex: Συνδυασμόςstd::recursive_mutexκαιstd::timed_mutex, που επιτρέπει αναδρομική κατάκτηση με χρονικό όριο.
std::shared_mutex (από την C++17) είναι ένα mutex με κοινόχρηστη πρόσβαση (ανάγνωση/εγγραφή), αλλά δεν ανήκει στους "τύπους" βασικών mutex με την ίδια έννοια με τους παραπάνω, αν και χρησιμοποιείται για το συγχρονισμό της πρόσβασης σε πόρους. Επιτρέπει σε πολλά νήματα να διαβάζουν ταυτόχρονα, αλλά μόνο σε ένα νήμα να γράφει.