std::lock_guard<std::mutex> lock(ObjectLock)如何解开
时间: 2023-08-18 09:09:00 浏览: 193
C++11 std::shared_ptr总结与使用示例代码详解
`std::lock_guard` 是C++中的一个RAII(资源获取即初始化)类模板,用于自动管理互斥量的锁定和解锁。当创建 `std::lock_guard` 对象时,它会自动获取互斥量的锁,并在其作用域结束时自动释放锁。
由于 `std::lock_guard` 对象在其作用域结束时自动释放锁,因此无法手动解开 `std::lock_guard` 对象。它的目的是确保在离开作用域时,互斥量的锁会被正确释放,以避免死锁和资源泄漏。
以下是一个示例,演示了如何使用 `std::lock_guard` 来管理互斥量的锁定和解锁:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int shared_resource = 0;
void increment()
{
std::lock_guard<std::mutex> lock(mtx); // 获取互斥量的锁
// 执行对共享资源的操作
shared_resource++;
std::cout << "线程ID: " << std::this_thread::get_id() << ",共享资源的值: " << shared_resource << std::endl;
// 离开作用域时,std::lock_guard 对象会自动释放互斥量的锁
}
int main()
{
std::thread threads[5];
for (int i = 0; i < 5; i++) {
threads[i] = std::thread(increment);
}
for (int i = 0; i < 5; i++) {
threads[i].join();
}
return 0;
}
```
在上面的代码中,我们使用 `std::lock_guard<std::mutex>` 来创建一个 `lock` 对象。在 `increment` 函数中,当 `lock` 对象被创建时,它会自动获取互斥量的锁,并在离开作用域时自动释放锁。
这样,我们就可以确保在任何情况下,无论是正常执行结束还是通过异常退出,互斥量的锁都会被正确释放。这种方式更加安全和可靠,避免了手动解开锁可能出现的遗漏和错误。
阅读全文