モニター - 注意事項

モニターは、読み取り、閲覧、書き込み操作を施錠できる同期オブジェクトである。この種類の同期はデータ構造を保護するために通常は使用される。データ構造へは、様々なスレッドが読み取りや書き込みを行おうとする。

モニターは内部プロセス同期オブジェクトとしてのみ使用される。

ライブラリ ルーチンを使用して作成され開かれたモニターはすべて、ランタイム システムが終了すると自動的に閉じられる。(例:STOP RUNの結果)

1つの書き込み錠は他のすべての読み取り、閲覧、書き込み錠を排除する。こうした書き込み錠はデータ構造への書き込みを行うときに使用されるのが一般的である。

閲覧錠は他の書き込み、閲覧錠を排除するが、同時読み取り錠は機能させる。閲覧錠は、読み込み結果によって書き込みを行う目的でデータ構造が読み込まれているときに使用される。この目的を達成するために、他の書き込みを行わずに閲覧錠を書き込み錠に変換する機能がある。

読み取り錠は他の読み取り錠のみを排除する。読み取り錠は書き込みの意図がないデータ構造の読み取りに使用される。

特定のモニターに読み取り錠を取得したスレッドは、同じモニターに別の読み取り錠を取得する可能性がある。しかし、読み取り錠が取得された時点で、その読み取り錠を格納してあるところに「無関係な」閲覧または読み取り錠が存在していなければ、スレッドは閲覧および読み取り錠を要求しない可能性がある。こうした規則を破ろうとすると、ランタイム システムエラーが発生する。交互的プライオリティ(優先機能)がモニターに要求されると、格納されていた読み取り錠は、書き込みが終了するまで待機しない。しかし、最初の読み取り錠がまだ作動中の場合は、書き込みアクセスが与えられる(シングルスレッドデッドロック)。格納された読み取り錠を取得したいなら、読み取り優先を使用するか、高度な施錠ができる書き込みもしくは閲覧錠を取得する必要がある。

特定のモニターで閲覧錠を取得したスレッドは、同じモニターから別の閲覧錠を取得する可能性がある。また書き込み錠を取得してしまう可能性もある。元の閲覧錠が書き込み錠に変換され書き込み錠が要求される前に、書き込み錠が解放される限り、読み取り錠も取得してしまう可能性がある。

特定のモニターで書き込み錠を取得したスレッドは同じモニターから別の書き込み、閲覧、読み取り錠を取得する可能性がある。

関連項目