<mutex>

クラス mutexrecursive_mutextimed_mutexrecursive_timed_mutex、テンプレート lock_guard および unique_lock、相互排他コード領域の定義をサポートしている型と関数を定義するには、標準ヘッダー <mutex> をインクルードします。

警告

Visual Studio 2015 以降の C++ 標準ライブラリ同期型は、Windows 同期プリミティブに基づいており、ターゲット プラットフォームが Windows XP の場合を除き、ConcRT を使用しなくなりました。 <mutex> で定義されている型は、ConcRT 型または関数には使用しないでください。

必要条件

ヘッダー:<mutex>

名前空間std:

解説

Note

/clr を使用してコンパイルされたコードでは、このヘッダーはブロックされます。

クラス mutexrecursive_mutexmutex 型です。 mutex 型には、既定のコンストラクターとデストラクターがあり、例外をスローしません。 これらのオブジェクトには、同じオブジェクトをロックしようとしている複数のスレッドがある場合に相互排他するためのメソッドがあります。 具体的には、mutex 型にはメソッド locktry_lock、およびunlock が含まれます。

  • lock メソッドは、スレッドがミューテックスの所有権を得るまでそのスレッドの呼び出しをブロックします。 その戻り値は無視されます。

  • try_lock メソッドは、ミューテックスをブロックせずに所有権を取得しようとします。 その戻り値の型は、bool に変換でき、メソッドが所有権を得ると true になりますが、それ以外の場合は false です。

  • unlock メソッドは、呼び出し元のスレッドからミューテックスの所有権を解放します。

型の引数として mutex 型を使用すると、テンプレート lock_guardunique_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 オブジェクト xy の内部状態の交換を試みます。
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_guardunique_lock のコンストラクターに渡されるオブジェクトを表し、同じコンストラクターに渡される mutex オブジェクトがロックされていることを示します。
defer_lock unique_lock のコンストラクターに渡すことのできるオブジェクトを表し、コンストラクターがそれに渡される mutex オブジェクトをロックしないことを示しています。
try_to_lock unique_lock のコンストラクターに渡すことのできるオブジェクトを表し、ブロックされずに渡される mutex オブジェクトのロック解除をコンストラクターが試みる必要があることを示します。

関連項目

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