次の方法で共有


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 順で次のライターに移動します。 このロックはライターに偏り、ライターの継続的な負荷の下でリーダーを使い果たす可能性があります。

関連項目

コンカレンシー名前空間
critical_section クラス