critical_section クラス
コンカレンシー ランタイムを明示的に認識する再入不可能なミューテックスです。
構文
class critical_section;
メンバー
パブリック typedef
名前 | 説明 |
---|---|
native_handle_type |
critical_section オブジェクトへの参照です。 |
パブリック クラス
名前 | 説明 |
---|---|
critical_section::scoped_lock クラス | critical_section オブジェクトの例外セーフな RAII ラッパー。 |
パブリック コンストラクター
名前 | 説明 |
---|---|
critical_section | 新しいクリティカル セクションを構築します。 |
~critical_section デストラクター | クリティカル セクションを破棄します。 |
パブリック メソッド
名前 | 説明 |
---|---|
lock | このクリティカル セクションを取得します。 |
native_handle | プラットフォーム固有のネイティブ ハンドルを返します (存在する場合)。 |
try_lock | ブロックせずにロックの取得を試みます。 |
try_lock_for | 特定の時間 (ミリ秒単位)、ブロックせずにロックの取得を試みます。 |
unlock | クリティカル セクションのロックを解除します。 |
解説
詳細については、「同期データ構造」をご覧ください。
継承階層
critical_section
要件
ヘッダー: concrt.h
名前空間: concurrency
critical_section
新しいクリティカル セクションを構築します。
critical_section();
~critical_section
クリティカル セクションを破棄します。
~critical_section();
解説
デストラクターが実行されたときに、ロックが保持されていないことが求められます。 ロックを保持したままクリティカル セクションを破棄できるようにすると、未定義の動作が発生します。
lock
このクリティカル セクションを取得します。
void lock();
解説
多くの場合、scoped_lock コンストラクトを使用して、例外セーフな方法で critical_section
オブジェクトを取得および解放する方が安全です。
呼び出し元コンテキストによってロックが既に保持されている場合、improper_lock 例外がスローされます。
native_handle
プラットフォーム固有のネイティブ ハンドルを返します (存在する場合)。
native_handle_type native_handle();
戻り値
クリティカル セクションへの参照。
解説
critical_section
オブジェクトは、Windows オペレーティング システムのプラットフォーム固有のネイティブ ハンドルに関連付けられていません。 このメソッドは、単にオブジェクト自体への参照を返します。
critical_section::scoped_lock クラス
critical_section
オブジェクトの例外セーフな RAII ラッパー。
class scoped_lock;
scoped_lock::scoped_lock
scoped_lock
オブジェクトを構築し、_Critical_section
パラメーターで渡された critical_section
オブジェクトを取得します。 クリティカル セクションが別のスレッドによって保持されている場合、この呼び出しはブロックされます。
explicit _CRTIMP scoped_lock(critical_section& _Critical_section);
パラメーター
_Critical_section
ロックするクリティカル セクション。
scoped_lock::~scoped_lock
scoped_lock
オブジェクトを破棄し、そのコンストラクターで提供されたクリティカル セクションを解放します。
~scoped_lock();
try_lock
ブロックせずにロックの取得を試みます。
bool try_lock();
戻り値
ロックが取得された場合は値 true
、それ以外の場合は値 false
。
try_lock_for
特定の時間 (ミリ秒単位)、ブロックせずにロックの取得を試みます。
bool try_lock_for(unsigned int _Timeout);
パラメーター
_Timeout
タイムアウトまでの待機時間 (ミリ秒単位)。
戻り値
ロックが取得された場合は値 true
、それ以外の場合は値 false
。
ロック解除
クリティカル セクションのロックを解除します。
void unlock();