Avatar ·

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