Sobes.tech
Middle

Ποιοι τύποι 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 με την ίδια έννοια με τους παραπάνω, αν και χρησιμοποιείται για το συγχρονισμό της πρόσβασης σε πόρους. Επιτρέπει σε πολλά νήματα να διαβάζουν ταυτόχρονα, αλλά μόνο σε ένα νήμα να γράφει.