unique_lock クラス
mutex
のロックとロック解除を管理するオブジェクトを作成するためにインスタンス化できるテンプレートを表します。
構文
template <class Mutex>
class unique_lock;
解説
テンプレート引数 Mutex
には mutex 型を指定する必要があります。
内部的には、unique_lock
には関連付けられた mutex
オブジェクトへのポインターと、現在のスレッドが mutex
を所有するかどうかを示す bool
が格納されます。
メンバー
パブリック typedef
名前 | 説明 |
---|---|
mutex_type |
テンプレート引数 Mutex のシノニム。 |
パブリック コンストラクター
名前 | 説明 |
---|---|
unique_lock | unique_lock オブジェクトを構築します。 |
~unique_lock デストラクター | unique_lock オブジェクトに関連付けられたすべてのリソースを解放します。 |
パブリック メソッド
名前 | 説明 |
---|---|
lock | 呼び出しスレッドが、関連付けられた mutex の所有権を取得するまで、そのスレッドをブロックします。 |
mutex | 格納されている、関連付けられた mutex へのポインターを取得します。 |
owns_lock | 呼び出し元のスレッドが、関連付けられた mutex を所有しているかどうかを指定します。 |
release | mutex から unique_lock オブジェクトの関連付けを解除します。 |
スワップ | 関連付けられた mutex と所有状態を、指定されたオブジェクトのものと入れ替えます。 |
try_lock | ブロックせずに関連付けられた mutex の所有権を取得しようとします。 |
try_lock_for | ブロックせずに関連付けられた mutex の所有権を取得しようとします。 |
try_lock_until | ブロックせずに関連付けられた mutex の所有権を取得しようとします。 |
unlock | 関連付けられた mutex の所有権を解放します。 |
パブリック演算子
名前 | 説明 |
---|---|
operator bool | 呼び出し元のスレッドに、関連付けられた mutex の所有権があるかどうかを指定します。 |
operator= | 格納された mutex ポインターと所有状態を、指定されたオブジェクトからコピーします。 |
継承階層
unique_lock
要件
ヘッダー:<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
呼び出し元のスレッドに、関連付けられたミューテックスの所有権があるかどうかを指定します。
explicit operator bool() noexcept
戻り値
スレッドがミューテックスを所有している場合は 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
。
release
mutex
から unique_lock
オブジェクトの関連付けを解除します。
mutex_type *release() noexcept;
戻り値
格納された mutex
ポインターの以前の値。
解説
このメソッドでは、格納された mutex
ポインターの値を 0 と設定し、内部の mutex
所有権フラグを false
に設定します。
スワップ
関連付けられた 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
メソッドが mutex
の所有権の取得を試行する時間について、その最大値を指定する chrono::duration オブジェクト。
戻り値
メソッドが 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
メソッドが mutex
の所有権の取得を試行する時間について、その最大値を指定する chrono::duration オブジェクト。
Abs_time
メソッドが mutex
の所有権の取得を止めるしきい値を指定する時点。
その他
unique_lock
オブジェクト。
解説
1 番目のコンストラクターは、関連付けられたミューテックス ポインター値が 0 であるオブジェクトを構築します。
2 番目のコンストラクターによって、関連付けられたミューテックスの状態が Other から移動します。 移動した後、Other はミューテックスと関連付けられなくなります。
残りのコンストラクターは、格納された mutex
ポインターとして & Mtx を格納します。 mutex
の所有権は、2 番目の引数 (存在する場合) によって決まります。
名前 | 説明 |
---|---|
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
オブジェクトに対するロック解除を呼び出すことによって所有権を解放します。
ロック解除
関連付けられた mutex
の所有権を解放します。
void unlock();
解説
呼び出し元のスレッドが、関連付けられた mutex
を所有していない場合、このメソッドはエラー コード operation_not_permitted
で system_error をスローします。
それ以外の場合、このメソッドは関連付けられた mutex
に対して unlock
を呼び出し、内部スレッド所有権フラグを false
に設定します。