std::unique_lock vs std::lock_guard: 在 C++ 中如何选择互斥锁?
你好!我开始学习 C++11 中的多线程,但在选择 std::unique_lock 和 std::lock_guard 时感到困惑。这两个类都用于锁定 mutex,但我不明白在什么情况下应该使用哪一个。
例如,我正在编写一个简单的线程安全计数器:
```cpp
#include
#include
#include
std::mutex mtx;
int counter = 0;
void increment() {
for (int i = 0; i < 100000; ++i) {
// 这里哪个更好?
std::lock_guard lock(mtx);
// 或者
std::unique_lock lock(mtx);
++counter;
}
}
```
两种方式都能编译并运行。但我听说 unique_lock 更“重”。什么时候应该使用它?有没有 lock_guard 不适用的情况?为什么标准库中有两个类似的类?请用例子解释一下。
提前感谢你的帮助!
<<>>
简短回答
使用 std::lock_guard