モニタ - 注意事項

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

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

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

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

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

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

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

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

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

関連項目