类模板
<mutex>

std::unique_lock

template <class Mutex> class unique_lock;
唯一锁
唯一锁是一个对象,它管理一个具有唯一所有权互斥量对象,该对象处于锁定解锁两种状态。

在构造时(或通过移动赋值),对象会获取一个互斥量对象,并负责该互斥量的锁定和解锁操作。

对象支持两种状态:锁定解锁

此类保证在销毁时处于解锁状态(即使未显式调用)。因此,它尤其适用于具有自动存储期的对象,因为它可以保证在抛出异常时互斥量对象被正确解锁。

请注意,unique_lock 对象不会以任何方式管理互斥量对象的生命周期:互斥量对象的生命周期应至少延长到管理它的unique_lock 对象销毁为止。

模板参数

互斥体
一个类似互斥量的类型
它应该是一个基本可锁定类型,例如mutex(参见BasicLockable了解要求)。

成员类型

成员类型定义描述
mutex_type模板参数(Mutex被管理的互斥量对象类型

成员函数


锁定/解锁


修改器


观察器


非成员重载


示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// unique_lock example
#include <iostream>       // std::cout
#include <thread>         // std::thread
#include <mutex>          // std::mutex, std::unique_lock

std::mutex mtx;           // mutex for critical section

void print_block (int n, char c) {
  // critical section (exclusive access to std::cout signaled by lifetime of lck):
  std::unique_lock<std::mutex> lck (mtx);
  for (int i=0; i<n; ++i) { std::cout << c; }
  std::cout << '\n';
}

int main ()
{
  std::thread th1 (print_block,50,'*');
  std::thread th2 (print_block,50,'$');

  th1.join();
  th2.join();

  return 0;
}

可能的输出(行顺序可能不同,但字符绝不会混合)

**************************************************
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$