public member function
<mutex>

std::unique_lock::try_lock

bool try_lock();
如果未鎖定,則鎖定互斥量
呼叫被管理互斥量物件的成員函式 try_lock,並使用其返回值設定擁有狀態

如果在呼叫之前擁有狀態已經是 true,或者物件當前未管理任何互斥量物件,則該函式將丟擲 system_error 異常。

引數



返回值

如果該函式成功鎖定了被管理的互斥量物件,則返回 true
否則返回 false

示例

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

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

void print_star () {
  std::unique_lock<std::mutex> lck(mtx,std::defer_lock);
  // print '*' if successfully locked, 'x' otherwise: 
  if (lck.try_lock())
    std::cout << '*';
  else                    
    std::cout << 'x';
}

int main ()
{
  std::vector<std::thread> threads;
  for (int i=0; i<500; ++i)
    threads.emplace_back(print_star);

  for (auto& x: threads) x.join();

  return 0;
}

可能的輸出('x' 的數量 -如果有的話- 可能不同)

*****************************x******************************x*x***x***x*x*x**x**
x**********x********************************************************************
************x*x*x*x*************************************************************
*******x********x**********x****************************************************
***************************************x*x*x*x**x*x*x*x*x*x*********************
**x*****************************************************************************
***************x****


資料競爭

訪問/修改 unique_lock 物件。
被管理的互斥量物件被作為原子操作訪問/修改(不會導致資料競爭)。

異常安全

基本保證:如果此成員函式丟擲異常,則 unique_lock 物件仍處於有效狀態。

如果呼叫失敗,將丟擲system_error 異常
異常型別錯誤條件描述
system_errorerrc::resource_deadlock_would_occurunique_lock 物件已擁有鎖
system_errorerrc::operation_not_permittedunique_lock 物件當前未管理任何互斥量物件(因為它被預設構造移動釋放了)。
如果被管理的互斥量物件上的 try_lock 呼叫失敗,或者庫實現透過此類機制報告的任何其他條件,也會丟擲異常。

另見