次の方法で共有


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_permittedsystem_error をスローします。

呼び出し元のスレッドが、関連付けられた mutex を既に所有している場合、このメソッドはエラー コード resource_deadlock_would_occursystem_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 を所有している場合、このメソッドでは、mutexunlock を呼び出す前に、新しい値を割り当てます。

コピーの後、このメソッドは、既定で構築される状態に 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_permittedsystem_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
メソッドが mutex の所有権の取得を試行する時間について、その最大値を指定する chrono::duration オブジェクト。

戻り値

メソッドが true の所有権の取得に成功した場合は mutex を返します。それ以外の場合は false を返します。

解説

格納された mutex ポインターが NULL である場合、このメソッドはエラー コード operation_not_permittedsystem_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_permittedsystem_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
メソッドが 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_permittedsystem_error をスローします。

それ以外の場合、このメソッドは関連付けられた mutex に対して unlock を呼び出し、内部スレッド所有権フラグを false に設定します。

関連項目

ヘッダー ファイル リファレンス
<mutex>