std::unique_lock <std::mutex> lck(mtxres); 如何解锁
时间: 2024-09-10 08:04:10 浏览: 81
C++11 std::shared_ptr总结与使用示例代码详解
`std::unique_lock` 是 C++11 中提供的一个资源管理类模板,用于管理互斥量(mutex)的锁定与解锁。当你创建了一个 `std::unique_lock` 对象并以某个互斥量作为参数进行构造时,这个互斥量会被锁定。`std::unique_lock` 对象在它的生命周期内可以控制互斥量的锁定与解锁状态。
解锁 `std::unique_lock` 对象所管理的互斥量有以下几种方法:
1. 使用 `unlock()` 成员函数直接解锁:
```cpp
lck.unlock();
```
2. 通过析构函数自动解锁:当 `std::unique_lock` 对象被销毁(例如走出其作用域),它会自动调用 `unlock()` 方法来释放互斥量。
3. 如果 `std::unique_lock` 对象是通过复制构造函数、移动构造函数或赋值操作获得的互斥量所有权,那么原 `std::unique_lock` 对象的析构或者 `unlock()` 调用会导致互斥量解锁。
4. 移动语义:可以使用移动构造函数或移动赋值操作转移 `std::unique_lock` 对象的所有权,并在转移过程中解锁原对象所管理的互斥量。
这里使用的是移动赋值操作的示例:
```cpp
std::unique_lock<std::mutex> lck2 = std::move(lck);
```
上面的代码将会把 `lck` 所管理的互斥量的所有权转移到 `lck2`。在这个过程中,`lck` 将不再控制任何互斥量,而 `lck2` 将接管 `lck` 原本的锁定状态。如果 `lck` 在转移所有权之前已经锁定,那么在转移后,`lck` 所管理的互斥量将被解锁。
阅读全文