什么是 std::unique_lock<std::mutex> 类的作用和用法?
时间: 2024-11-13 19:22:07 浏览: 10
C++11 并发指南之std::mutex详解
`std::unique_lock<std::mutex>` 是 C++ 标准库中的一部分,它是一个互斥锁的独占所有权锁。这个模板类用于在访问共享资源(如全局变量、线程安全的数据结构等)时提供原子性和锁定管理。
它的作用主要包括:
1. **锁定**:当你创建一个 `unique_lock` 对象并将其绑定到一个 `std::mutex` 上时,它会自动获取锁,确保在同一时刻只有一个线程可以访问该资源。
2. **生命周期管理**:`unique_lock` 的构造函数会尝试获取锁,析构函数会在对象离开作用域时自动释放锁,这使得锁的管理更加简洁,减少了手动释放锁出错的可能性。
3. **异常安全性**:如果在尝试获取锁时抛出异常,`unique_lock` 的默认行为是确保锁总是被适当地释放,这对于避免悬挂指针和其他资源泄露很重要。
4. **try_lock 和 lock_shared**:提供了一些选项,比如 `try_lock` 可以检查是否能立即获得锁而不阻塞,`lock_shared` 则允许共享式读取锁,允许多个读者同时访问。
用法示例:
```cpp
std::mutex mtx;
std::unique_lock<std::mutex> lock(mtx);
// 现在只有这一段代码块能够访问被锁住的资源
do_something();
lock.unlock(); // 当完成操作后释放锁
```
阅读全文