unique_lock 類別
表示可以具現化的範本,用來建立管理鎖定和解除鎖定 mutex
的物件。
語法
template <class Mutex>
class unique_lock;
備註
範本引數 Mutex
必須命名 mutex 類型。
就內部而言,unique_lock
會將指標儲存至相關聯的 mutex
物件,以及表示目前的執行緒是否擁有 mutex
的 bool
。
成員
公用 Typedefs
名稱 | 描述 |
---|---|
mutex_type |
與範本引數 Mutex 同義。 |
公用建構函式
名稱 | 描述 |
---|---|
unique_lock | 建構 unique_lock 物件。 |
~unique_lock 解構函式 | 釋放任何與 unique_lock 物件相關聯的資源。 |
公用方法
名稱 | 描述 |
---|---|
lock | 封鎖呼叫的執行緒,直到執行緒取得相關聯 mutex 的擁有權。 |
mutex | 擷取相關聯 mutex 的已儲存指標。 |
owns_lock | 指定呼叫的執行緒是否擁有相關聯 mutex 。 |
release | 從相關聯 mutex 物件解除 unique_lock 物件的關聯。 |
swap | 交換指定物件的相關聯 mutex 和擁有權狀態。 |
try_lock | 嘗試在不造成封鎖的情況下,取得關聯 mutex 的擁有權。 |
try_lock_for | 嘗試在不造成封鎖的情況下,取得關聯 mutex 的擁有權。 |
try_lock_until | 嘗試在不造成封鎖的情況下,取得關聯 mutex 的擁有權。 |
unlock | 釋放相關聯 mutex 的擁有權。 |
公用運算子
名稱 | 描述 |
---|---|
operator bool | 指定呼叫的執行緒是否有相關聯 mutex 的擁有權。 |
operator= | 複製指定物件的已儲存 mutex 指標和相關聯擁有權狀態。 |
繼承階層架構
unique_lock
需求
Header:<mutex>
命名空間:std
lock
封鎖呼叫的執行緒,直到執行緒取得相關聯 mutex
的擁有權。
void lock();
備註
如果預mutex
存指標為 NULL,這個方法會擲回具有錯誤碼operation_not_permitted
的 system_error。
如果呼叫的執行緒已經擁有相關聯 mutex
,此方法會擲回錯誤碼為 resource_deadlock_would_occur
的 system_error
。
否則,這個方法會在相關聯 mutex
上呼叫 lock
,並將內部執行緒擁有權旗標設定為 true
。
mutex
擷取相關聯 mutex
的已儲存指標。
mutex_type *mutex() const noexcept;
operator bool
指定呼叫的執行緒是否有相關聯 mutex 的擁有權。
explicit operator bool() noexcept
傳回值
如果執行緒擁有 mutex 則為 true
,否則為 false
。
operator=
複製指定物件的已儲存 mutex
指標和相關聯擁有權狀態。
unique_lock& operator=(unique_lock&& Other) noexcept;
參數
其他
unique_lock
物件。
傳回值
*this
備註
如果呼叫的執行緒擁有先前的相關聯 mutex
,在此方法於 mutex
上呼叫 unlock
之前,它會指派新的值。
複製之後,這個方法會將 Other 設定為預設建構的狀態。
owns_lock
指定呼叫的執行緒是否擁有相關聯 mutex
。
bool owns_lock() const noexcept;
傳回值
如果執行緒擁有 mutex
則為 true
,否則為 false
。
版本
從相關聯 mutex
物件解除 unique_lock
物件的關聯。
mutex_type *release() noexcept;
傳回值
已儲存 mutex
指標先前的值。
備註
此方法會將已儲存 mutex
指標的值設為 0,並將內部 mutex
擁有權旗標設為 false
。
swap
交換指定物件的相關聯 mutex
和擁有權狀態。
void swap(unique_lock& Other) noexcept;
參數
其他
unique_lock
物件。
try_lock
嘗試在不造成封鎖的情況下,取得關聯 mutex
的擁有權。
bool try_lock() noexcept;
傳回值
如果方法成功取得 true
的擁有權,就是 mutex
,否則為 false
。
備註
如果預mutex
存指標為 NULL,此方法會擲回具有錯誤碼operation_not_permitted
的 system_error。
如果呼叫的執行緒已經擁有 mutex
,方法會擲回錯誤碼為 resource_deadlock_would_occur
的 system_error
。
try_lock_for
嘗試在不造成封鎖的情況下,取得關聯 mutex
的擁有權。
template <class Rep, class Period>
bool try_lock_for(
const chrono::duration<Rep, Period>& Rel_time);
參數
Rel_time
chrono::duration 物件,此物件會指定方法嘗試取得 mutex
擁有權的時間上限。
傳回值
如果方法成功取得 true
的擁有權,就是 mutex
,否則為 false
。
備註
如果預mutex
存指標為 NULL,此方法會擲回具有錯誤碼operation_not_permitted
的 system_error。
如果呼叫的執行緒已經擁有 mutex
,方法會擲回錯誤碼為 resource_deadlock_would_occur
的 system_error
。
try_lock_until
嘗試在不造成封鎖的情況下,取得關聯 mutex
的擁有權。
template <class Clock, class Duration>
bool try_lock_until(const chrono::time_point<Clock, Duration>& Abs_time);
bool try_lock_until(const xtime* Abs_time);
參數
Abs_time
這個時間點所指定的臨界值一超過,方法就不再嘗試取得 mutex
的擁有權。
傳回值
如果方法成功取得 true
的擁有權,就是 mutex
,否則為 false
。
備註
如果預mutex
存指標為 NULL,此方法會擲回具有錯誤碼operation_not_permitted
的 system_error。
如果呼叫的執行緒已經擁有 mutex
,方法會擲回錯誤碼為 resource_deadlock_would_occur
的 system_error
。
unique_lock 建構函式
建構 unique_lock
物件。
unique_lock() noexcept;
unique_lock(unique_lock&& Other) noexcept;
explicit unique_lock(mutex_type& Mtx);
unique_lock(mutex_type& Mtx, adopt_lock_t Adopt);
unique_lock(mutex_type& Mtx, defer_lock_t Defer) noexcept;
unique_lock(mutex_type& Mtx, try_to_lock_t Try);
template <class Rep, class Period>
unique_lock(mutex_type& Mtx,
const chrono::duration<Rep, Period>
Rel_time);
template <class Clock, class Duration>
unique_lock(mutex_type& Mtx,
const chrono::time_point<Clock, Duration>
Abs_time);
unique_lock(mutex_type& Mtx,
const xtime* Abs_time) noexcept;
參數
Mtx
「mutex 類型」物件。
Rel_time
chrono::duration 物件,此物件會指定方法嘗試取得 mutex
擁有權的時間上限。
Abs_time
這個時間點所指定的臨界值一超過,方法就不再嘗試取得 mutex
的擁有權。
其他
unique_lock
物件。
備註
第一個建構函式會建構相關聯 mutex 指標值為 0 的物件。
第二個建構函式會從 [其他] 移動相關聯的 Mutex 狀態。 移動之後, Other 不再與 Mutex 相關聯。
其餘建構函式會將和 Mtx 儲存為預 mutex
存指標。 mutex
的擁有權取決於第二個引數 (如果存在的話)。
名稱 | 描述 |
---|---|
No argument |
擁有權是透過在相關聯 mutex 物件上呼叫 lock 方法來取得。 |
Adopt |
取得擁有權。 呼叫建構函式時,必須鎖定 Mtx 。 |
Defer |
將假設呼叫的執行緒不擁有 mutex 物件。 當呼叫建構函式時,不能鎖定 Mtx 。 |
Try |
擁有權是透過在相關聯 mutex 物件上呼叫 try_lock 來決定。 建構函式不會擲回任何項目。 |
Rel_time |
擁有權是透過呼叫 try_lock_for(Rel_time) 來決定。 |
Abs_time |
擁有權是透過呼叫 try_lock_until(Abs_time) 來決定。 |
~unique_lock 解構函式
釋放任何與 unique_lock
物件相關聯的資源。
~unique_lock() noexcept;
備註
如果呼叫的執行緒擁有相關聯 mutex
,解構函式會透過在 mutex
物件上呼叫 unlock 來釋放擁有權。
unlock
釋放相關聯 mutex
的擁有權。
void unlock();
備註
如果呼叫的執行緒不擁有相關聯 mutex
,此方法會擲回錯誤碼為 operation_not_permitted
的 system_error。
否則,這個方法會在相關聯 mutex
上呼叫 unlock
,並將內部執行緒擁有權旗標設定為 false
。