スケーラブルで、ライターを優先する 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() |
リーダーロックを解放します (取得している場合)。 |