D 2.0
About Japanese Translation

Last update Thu Oct 28 17:54:37 2010

core.sync.rwmutex

remutex モジュールは、 共有の読み取りと相互排他の書き込みアクセス機能を実現する同期プリミティブを提供します。

License:
Boost License 1.0.

Authors:
Sean Kelly

Source:
core/sync/rwmutex.d
class ReadWriteMutex;
このクラスは、任意の数の読み取りスレッドから同時アクセスできるけれど、 書き込みアクセスの最中は他のすべての読み書きがブロックされるMutexの実装です。

このMutexは再帰的ではなく、データへのアクセスのガードのみを意図していることにご注意下さい。 さらに、パフォーマンスに無視できない悪影響を及ぼす動的メモリ確保が必要となってしまうため、 デッドロック検査の機能もありません。 結果として、再帰的にこのMutexをロックしようとすると、 特に読み取りロック中に書き込みロックしようとする或いはその逆のケースで、 デッドロックします。しかし現実問題としては、これは問題とはならないでしょう。 というのは、単にデータを保護するためだけのロックの最中に、 未知のコードの奥深くを呼び出すような事態はあまりないはずですから。

enum Policy;
Mutexのポリシー定義です。現在の所、 二つのポリシーが用意されています。

1つめは、読み取りロックが1つもなくなるまで、書き込みを待機するポリシーです。 読み取りロックがないときには、1つずつ書き込みを実行します。 書き込み待ちの行列が並んでいるときであっても、後から来た読み取りロックの方が優先されます。

2つめは、書き込みロックが1つもなくなるまで、読み取りを待機するポリシーです。 書き込みは1つずつ実行され、一つも書き込み待ちが無くなると、 全ての読み取り待ちスレッドに通知が飛びます。

将来的には、読み取りと書き込みの間にもっとバランスを取ったポリシーを提供できるかもしれません。

PREFER_READERS
読み取り優先。書き込み側にスタベーションが発生する可能性があります。

PREFER_WRITERS
書き込み優先。読み取り側にスタベーションが発生する可能性があります。

this(Policy policy = (Policy).PREFER_WRITERS);
読み書きMutexオブジェクトを指定のポリシーで初期化します。

Parameters:
Policy policy 使うポリシー

Throws:
エラー時に SyncException

Policy policy();
このMutexのポリシーを返します

Returns:
このMutexのポリシー

Reader reader();
このMutexに対する読み取りアクセスを表現したMutexを返します。

Returns:
読み取りロック用Mutexを返します。

Writer writer();
このMutexに対する書き込みアクセスを表現したMutexを返します。

Returns:
書き込みロック用Mutexを返します。

class Reader: object.Object.Monitor;
このオブジェクトは単独で単なるMutexとしてみることができ、 元のMutexへの読み込みアクセスを獲得するためのロックを表します。

this();
オブジェクトを初期化します。

void lock();
元のMutexへの読み取りアクセスを獲得します。

void unlock();
元のMutexへの読み取りアクセスを解放します。

bool tryLock();
元のMutexへの読み込みアクセスの獲得を試みます。 ブロックされなかった場合はロックを獲得し、true を返します。 ブロックされた場合は false をすぐに返します。

Returns:
ロックが獲得できれば true、できなければ false

class Writer: object.Object.Monitor;
このオブジェクトは単独で単なるMutexとしてみることができ、 元のMutexへの書き込みアクセスを獲得するためのロックを表します。

this();
オブジェクトを初期化します。

void lock();
元のMutexへの書き込みアクセスを獲得します。

void unlock();
元のMutexへの書き込みアクセスを解放します。

bool tryLock();
元のMutexへの書き込みアクセスの獲得を試みます。 ブロックされなかった場合はロックを獲得し、true を返します。 ブロックされた場合は false をすぐに返します。

Returns:
ロックが獲得できれば true、できなければ false