std::unique_lock vs std::lock_guard: Was für einen Mutex in C++ wählen?
Hallo! Ich habe angefangen, Multithreading in C++11 zu lernen und bin verwirrt bei der Wahl zwischen std::unique_lock und std::lock_guard. Beide Klassen werden zum Sperren eines Mutex verwendet, aber ich verstehe nicht, in welchen Fällen man welche anwenden soll.
Zum Beispiel schreibe ich einen einfachen threadsicheren Zähler:
```cpp
#include
#include
#include
std::mutex mtx;
int counter = 0;
void increment() {
for (int i = 0; i < 100000; ++i) {
// Was ist hier besser?
std::lock_guard lock(mtx);
// oder
std::unique_lock lock(mtx);
++counter;
}
}
```
Beide Varianten kompilieren und funktionieren. Aber ich habe gehört, dass unique_lock "schwerer" ist. Wann sollte man es verwenden? Gibt es Situationen, in denen lock_guard nicht geeignet ist? Und warum gibt es in der Standardbibliothek zwei ähnliche Klassen? Erklären Sie bitte anhand von Beispielen.
Vielen Dank im Voraus für Ihre Hilfe!
<<>>
Kurze Antwort
Verwenden Sie std::lock_guard