スケーラブルで、ライターを優先する PPL 互換のリーダー/ライター mutex。
class reader_writer_lock;
#include "tbb/reader_writer_lock.h"
reader_writer_lock は、PPL 互換のリーダー/ライター mutex を実装します。reader_writer_lock はスケーラブルです。再帰的ではありません。ライターがリーダーよりも優先されることを除いて、ロックのリクエストを先着順に処理します。スレッドが reader_writer_lock の取得を待つ必要がある場合、ビジーウェイトを行うため、ウェイトが長くなるとシステムのパフォーマンスに影響します。しかし、ウェイトが短い場合、reader_writer_lock は、ほかの mutex よりも大幅にパフォーマンスを向上させます。
reader_writer_lock は、ReaderWriterMutex コンセプトの一部と C++11 互換インターフェイスの一部をモデル化します。主な違いは次のとおりです。
スコープ・インターフェイスはスコープロックのみサポートします。例えば、scoped_lock::release() メソッドはサポートされません。
リーダーロックは別のインターフェイスです。例えば、ReaderWriterMutex コンセプトのリーダーを識別するフラグの代わりに、リーダーロック用の個別のスコープ・インターフェイス scoped_lock_read があります。
namespace tbb { class reader_writer_lock { public: reader_writer_lock(); ~reader_writer_lock(); void lock(); void lock_read(); bool try_lock(); bool try_lock_read(); void unlock(); class scoped_lock { public: scoped_lock( reader_writer_lock& mutex ); ~scoped_lock(); }; class scoped_lock_read { public: scoped_lock_read( reader_writer_lock& mutex ); ~scoped_lock_read(); }; };}
次の表は、このクラスのメンバーを要約したものです。
メンバー |
意味 |
---|---|
reader_writer_lock() |
ロックしていない mutex を構築します。 |
~reader_writer_lock() |
ロックしていない mutex を破棄します。 |
void reader_writer_lock::lock() |
mutex のライターロックを取得します。 |
void reader_writer_lock::lock_read() |
mutex のリーダーロックを取得します。 |
bool reader_writer_lock::try_lock() |
mutex のライターロックを取得しようとします。ロックが取得された場合は true、その他の場合は false を返します。 |
bool reader_writer_lock::try_lock_read() |
mutex のリーダーロックを取得しようとします。ロックが取得された場合は true、その他の場合は false を返します。 |
reader_writer_lock::unlock() |
ロックを解放します。 |
reader_writer_lock::scoped_lock (reader_writer_lock& m) |
mutex m のライターロックを取得します。 |
reader_writer_lock::~scoped_lock() |
ライターロックを解放します (取得している場合)。 |
reader_writer_lock::scoped_lock_read (reader_writer_lock& m) |
mutex m のリーダーロックを取得します。 |
reader_writer_lock::~scoped_lock_read() |
リーダーロックを解放します (取得している場合)。 |