類模板
<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;
}

可能的輸出(行順序可能不同,但字元絕不會混合)

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