<mutex>
クラス mutex
、recursive_mutex
、timed_mutex
、recursive_timed_mutex
、テンプレート lock_guard
および unique_lock
、相互排他コード領域の定義をサポートしている型と関数を定義するには、標準ヘッダー <mutex>
をインクルードします。
警告
Visual Studio 2015 以降の C++ 標準ライブラリ同期型は、Windows 同期プリミティブに基づいており、ターゲット プラットフォームが Windows XP の場合を除き、ConcRT を使用しなくなりました。 <mutex>
で定義されている型は、ConcRT 型または関数には使用しないでください。
要件
ヘッダー: <mutex>
名前空間: std
解説
Note
/clr
を使用してコンパイルされたコードでは、このヘッダーはブロックされます。
クラス mutex
とrecursive_mutex
は mutex 型です。 mutex 型には、既定のコンストラクターとデストラクターがあり、例外をスローしません。 これらのオブジェクトには、同じオブジェクトをロックしようとしている複数のスレッドがある場合に相互排他するためのメソッドがあります。 具体的には、mutex 型にはメソッド lock
、try_lock
、およびunlock
が含まれます。
lock
メソッドは、スレッドがミューテックスの所有権を得るまでそのスレッドの呼び出しをブロックします。 その戻り値は無視されます。try_lock
メソッドは、ミューテックスをブロックせずに所有権を取得しようとします。 その戻り値の型は、bool
に変換でき、メソッドが所有権を得るとtrue
になりますが、それ以外の場合はfalse
です。unlock
メソッドは、呼び出し元のスレッドからミューテックスの所有権を解放します。
型の引数として mutex 型を使用すると、テンプレート lock_guard
と unique_lock
をインスタンス化できます。 これらの型のオブジェクトを Lock
引数として使用すると、テンプレート condition_variable_any
でメンバー関数を待機できます。
timed mutex type は mutex 型の要件を満たします。 また、呼び出しには 1 つの引数を使用し、bool
に変換可能な型を返す try_lock_for
メソッドと try_lock_until
メソッドがあります。 timed mutex 型では、追加の引数を使用してこれらの関数を定義できます (追加の引数すべてに既定値があることが条件)。
try_lock_for
メソッドは、型がchrono::duration
でインスタンス化されている 1 つの引数Rel_time
を使用して呼び出し可能である必要があります。 メソッドはミューテックスの所有権を取得しようとしますが、取得できたかどうかに関係なく、Rel_time
で指定された時間内に値が返されます。 メソッドが所有権を取得した場合は戻り値がtrue
に変換されますが、取得していない場合はfalse
に変換されます。try_lock_until
メソッドは、型がchrono::time_point
でインスタンス化されている 1 つの引数Abs_time
を使用して呼び出し可能である必要があります。 メソッドはミューテックスの所有権を取得しようとしますが、取得できたかどうかに関係なく、Abs_time
で指定された時間内に値が返されます。 メソッドが所有権を取得した場合は戻り値がtrue
に変換されますが、取得していない場合はfalse
に変換されます。
mutex 型は lockable 型とも呼ばれます。 メンバー関数 try_lock
が提供されない場合は、"basic lockable 型" になります。 timed mutex 型は "timed lockable 型" と呼ばれます。 "timed lockable 型" は、指定された時間だけ、またはミューテックスのロックが取得されるまで、ブロックします。
メンバー
クラス
名前 | 説明 |
---|---|
lock_guard クラス |
オブジェクトを作成し、そのデストラクターがミューテックスのロックを解除するためにインスタンス化できるテンプレートを表します。 |
mutex クラス (C++ 標準ライブラリ) |
mutex 型を表します。 この型のオブジェクトを使用して、プログラム内で相互排他を適用します。 |
recursive_mutex クラス |
mutex 型を表します。 mutex クラスとは異なり、既にロックされているオブジェクトのロック メソッドを呼び出す動作は詳細に定義されています。 |
recursive_timed_mutex クラス |
この型のオブジェクトを使用して、プログラム内で時間制限ブロックのある相互排他を適用します。 timed_mutex とは異なり、recursive_timed_mutex オブジェクトにロック メソッドを呼び出すことによる影響は詳細に定義されています。 |
scoped_lock クラス |
|
timed_mutex クラス |
この型のオブジェクトを使用して、プログラム内で時間制限ブロックのある相互排他を適用します。 |
unique_lock クラス |
ミューテックスのロックとロック解除を管理するオブジェクトを作成するためにインスタンス化できるテンプレートを表します。 |
関数
名前 | 説明 |
---|---|
call_once |
指定された呼び出し可能オブジェクトが、実行中に 1 回だけ呼び出されるメカニズムを提供します。 |
lock |
デッドロックなしですべての引数をロックしようとします。 |
swap |
2 つの mutex オブジェクト x と y の内部状態の交換を試みます。 |
try_lock |
ロック可能なオブジェクトのロックを試みます。 直ちに戻ります。 |
構造
名前 | 説明 |
---|---|
adopt_lock_t 構造体 |
adopt_lock の定義に使用する型を表します。 |
defer_lock_t 構造体 |
unique_lock のオーバーロード コンストラクターの 1 つを選択するために使用される、defer_lock オブジェクトを定義する型を表します。 |
once_flag 構造体 |
テンプレート関数 call_once で使用する struct を表し、実行する複数スレッドがある場合でも、初期化コードが 1 回だけ呼び出されるようにします。 |
try_to_lock_t 構造体 |
unique_lock のオーバーロード コンストラクターの 1 つを選択するために使用される、try_to_lock オブジェクトを定義する struct を表し ます。 |
変数
名前 | 説明 |
---|---|
adopt_lock |
lock_guard と unique_lock のコンストラクターに渡されるオブジェクトを表し、同じコンストラクターに渡される mutex オブジェクトがロックされていることを示します。 |
defer_lock |
unique_lock のコンストラクターに渡すことのできるオブジェクトを表し、コンストラクターがそれに渡される mutex オブジェクトをロックしないことを示しています。 |
try_to_lock |
unique_lock のコンストラクターに渡すことのできるオブジェクトを表し、ブロックされずに渡される mutex オブジェクトのロック解除をコンストラクターが試みる必要があることを示します。 |