Welche Arten von Mutexes gibt es in der Standardbibliothek von C++?
sobes.tech KI
Antwort von AI
In der Standardbibliothek von C++ (ab C++11) sind die folgenden Arten von Mutexen definiert:
-
std::mutex: Grundlegender, nicht-rekursiver Mutex. Ein Thread, der ihn besitzt, kann ihn nicht erneut erwerben, ohne ihn vorher freizugeben. Der Versuch, ihn vom selben Thread erneut zu erwerben, führt zu undefiniertem Verhalten. -
std::recursive_mutex: Rekursiver Mutex. Erlaubt es einem Thread, ihn mehrfach zu erwerben. Die Anzahl der Erwerbe und Freigaben muss übereinstimmen, damit der Mutex für andere Threads verfügbar ist. Erhöht die Kosten im Vergleich zustd::mutex. -
std::timed_mutex: Das gleiche wiestd::mutex, aber mit der Möglichkeit, den Erwerb mit einer Zeitüberschreitung zu versuchen (try_lock_for,try_lock_until). Nützlich, um Deadlocks in bestimmten Fällen zu vermeiden. -
std::recursive_timed_mutex: Kombination ausstd::recursive_mutexundstd::timed_mutex, die rekursive Erwerbe mit Zeitüberschreitung erlaubt.
std::shared_mutex (ab C++17) ist ein Mutex mit geteiltem Zugriff (Lesen/Schreiben), gehört aber nicht zu den "Grundtypen" von Mutexen im selben Sinne wie die oben genannten, wird aber zur Synchronisation des Zugriffs auf Ressourcen verwendet. Er erlaubt mehreren Threads gleichzeitig zu lesen, aber nur einem Thread zu schreiben.