共用方式為


unique_lock 類別

表示可以具現化的範本,用來建立管理鎖定和解除鎖定 mutex 的物件。

語法

template <class Mutex>
class unique_lock;

備註

範本引數 Mutex 必須命名 mutex 類型

就內部而言,unique_lock 會將指標儲存至相關聯的 mutex 物件,以及表示目前的執行緒是否擁有 mutexbool

成員

公用 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_occursystem_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_occursystem_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_occursystem_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_occursystem_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_permittedsystem_error

否則,這個方法會在相關聯 mutex 上呼叫 unlock,並將內部執行緒擁有權旗標設定為 false

另請參閱

標頭檔參考
<mutex>