reader_writer_lock クラス
ローカルのみのスピンを行う、ライター優先キュー ベースのリーダー ライター ロックです。 ロックはライターに先入れ先出し (FIFO: First In First Out) アクセスを許可し、ライターに連続的な負荷がかかる状況ではリーダーが処理を実行できなくします。
構文
class reader_writer_lock;
メンバー
パブリック クラス
名前 | 説明 |
---|---|
reader_writer_lock::scoped_lock クラス | ライターとして reader_writer_lock ロック オブジェクトを取得するために使用できる例外セーフ RAII ラッパー。 |
reader_writer_lock::scoped_lock_read クラス | リーダーとして reader_writer_lock ロック オブジェクトを取得するために使用できる例外セーフ RAII ラッパー。 |
パブリック コンストラクター
名前 | 説明 |
---|---|
reader_writer_lock | 新しい reader_writer_lock オブジェクトを構築します。 |
~reader_writer_lock デストラクター | reader_writer_lock オブジェクトを破棄します。 |
パブリック メソッド
名前 | 説明 |
---|---|
lock | リーダー/ライター ロックをライターとして取得します。 |
lock_read | リーダー/ライター ロックをリーダーとして取得します。 ライターがある場合、アクティブなリーダーは完了するまで待つ必要があります。 リーダーは単に、ロックを関心対象として登録し、ライターがロックを解放するまで待機します。 |
try_lock | ブロックせずに、リーダー/ライター ロックをライターとして取得しようとします。 |
try_lock_read | ブロックせずに、リーダー/ライター ロックをリーダーとして取得しようとします。 |
unlock | ロックしたユーザー、リーダー、またはライターに基づいて、リーダー/ライター ロックを解除します。 |
解説
詳細については、「同期データ構造」をご覧ください。
継承階層
reader_writer_lock
要件
ヘッダー: concrt.h
名前空間: concurrency
lock
リーダー/ライター ロックをライターとして取得します。
void lock();
解説
多くの場合、scoped_lock コンストラクトを使用して、ライターとして例外セーフな方法で reader_writer_lock
オブジェクトを取得および解放する方が安全です。
ライターがロックを取得しようとした後に、ライターがロックを正常に取得して解放するまで、将来のリーダーはブロックします。 このロックはライターに偏り、ライターの継続的な負荷の下でリーダーを使い果たす可能性があります。
ライターはチェーンされ、ロックを終了するライターはチェーンの次のライターを解放します。
呼び出し元コンテキストによってロックが既に保持されている場合、improper_lock 例外がスローされます。
lock_read
リーダー/ライター ロックをリーダーとして取得します。 ライターがある場合、アクティブなリーダーは完了するまで待つ必要があります。 リーダーは単に、ロックを関心対象として登録し、ライターがロックを解放するまで待機します。
void lock_read();
解説
多くの場合、scoped_lock_read コンストラクトを使用して、リーダーとして例外セーフな方法で reader_writer_lock
オブジェクトを取得および解放する方が安全です。
ロックを待機しているライターがある場合、リーダーは、チェーン内のすべてのライターがロックを取得して解放するまで待機します。 このロックはライターに偏り、ライターの継続的な負荷の下でリーダーを使い果たす可能性があります。
reader_writer_lock
新しい reader_writer_lock
オブジェクトを構築します。
reader_writer_lock();
~reader_writer_lock
reader_writer_lock
オブジェクトを破棄します。
~reader_writer_lock();
解説
デストラクターが実行されたときに、ロックが保持されていないことが求められます。 ロックを保持したままリーダー/ライター ロックを破棄できるようにすると、未定義の動作が発生します。
reader_writer_lock::scoped_lock クラス
ライターとして reader_writer_lock
ロック オブジェクトを取得するために使用できる例外セーフ RAII ラッパー。
class scoped_lock;
scoped_lock::scoped_lock
scoped_lock
オブジェクトを構築し、_Reader_writer_lock
パラメーターで渡された reader_writer_lock
オブジェクトをライターとして取得します。 ロックが別のスレッドによって保持されている場合、この呼び出しはブロックされます。
explicit _CRTIMP scoped_lock(reader_writer_lock& _Reader_writer_lock);
パラメーター
_Reader_writer_lock
ライターとして取得する reader_writer_lock
オブジェクト。
scoped_lock::~scoped_lock
reader_writer_lock
オブジェクトを破棄し、そのコンストラクターで提供されたロックを解放します。
~scoped_lock();
reader_writer_lock::scoped_lock_read クラス
リーダーとして reader_writer_lock
ロック オブジェクトを取得するために使用できる例外セーフ RAII ラッパー。
class scoped_lock_read;
scoped_lock_read::scoped_lock_read
scoped_lock_read
オブジェクトを構築し、_Reader_writer_lock
パラメーターで渡された reader_writer_lock
オブジェクトをリーダーとして取得します。 ロックが別のスレッドによってライターとして保持されている場合、または保留中のライターがある場合、この呼び出しはブロックされます。
explicit _CRTIMP scoped_lock_read(reader_writer_lock& _Reader_writer_lock);
パラメーター
_Reader_writer_lock
リーダーとして取得する reader_writer_lock
オブジェクト。
reader_writer_lock::scoped_lock_read::~scoped_lock_read デストラクター
scoped_lock_read
オブジェクトを破棄し、そのコンストラクターで提供されたロックを解放します。
~scoped_lock_read();
try_lock
ブロックせずに、リーダー/ライター ロックをライターとして取得しようとします。
構文
bool try_lock();
戻り値
ロックが取得された場合は値 true
、それ以外の場合は値 false
。
try_lock_read
ブロックせずに、リーダー/ライター ロックをリーダーとして取得しようとします。
bool try_lock_read();
戻り値
ロックが取得された場合は値 true
、それ以外の場合は値 false
。
ロック解除
ロックしたユーザー、リーダー、またはライターに基づいて、リーダー/ライター ロックを解除します。
void unlock();
解説
ロックを待機しているライターがある場合、ロックの解放は常に FIFO 順で次のライターに移動します。 このロックはライターに偏り、ライターの継続的な負荷の下でリーダーを使い果たす可能性があります。