M ロック

LOCKコマンドは、1つ以上のリソース名を予約します。同時に1つのプロセスだけがリソースの名前を予約することができます。リソース名は、Mの変数とまったく同じ構成規則に従います。それらは、添字が無い場合と添字が有る場合があるかもしれないし、先頭にキャレット ( ^ ) 接頭辞がある場合とない場合があります。Mコードは、一般的にグローバルデータへのアクセスを制御するフラグとして LOCKs(ロック)を使用しています。一般的に、LOCKは保護されたアクセスを必要とするグローバル変数と同じ名前を持つリソースを指定します。ただし、これは単なる規則です。ロックすること(LOCKing)は、同じグローバル変数を変更してから、2つ以上のプロセスを保持することはありません。それだけが同時に同じリソース名をロック(LOCKing)してから別のプロセスが保持します。

Mロックは階層構造になっています。もし1つのプロセスがリソースのロックを保持している場合、他のプロセスはリソースの上位(祖先:ancestor) も下位(子孫:descendant) のどちらもロックはできません。たとえば、^A(1,2) のロックは ^A(1) も ^A(1,2,3) のどちらのロックもブロックしますが、しかし、^A(2) またはその下位(子孫)はロックしません。

LOCKの引数は、先行するキャレット記号(^)を除いた名前を含むすべてのM変数名の添字ありまたは添字無しを含めることができます。それらはローカル変数名の体裁を持っているとして、先行するキャレット記号 ( ^ ) が無いリソースの名前は、これらのロックが他のプロセスとのやりとりがあるにもかかわらず、一般的に "local LOCKs ローカルロック" と呼ばれています。 LOCKとプロセス間の相互作用の詳細については、GT.M管理および操作ガイド のLKEの章を参照してください。

GT.Mランタイムシステムは、同じ名前のグローバルを保持している領域に関連したインメモリのLOCK情報を記録します。しかし、GT.Mはグローバルを保持するデータベース構造にロックを配置しません。代わりにGT.Mロックマネージャは各データベースの領域に関連付けられている " LOCK データベース"を設定します。唯一MコマンドLOCK、ZALLOCATE、ZDEALLOCATEとLKEユーティリティは、"LOCKデータベース" 内の情報にアクセスします。

GT.Mは Global Directory(GD)で識別されるデータベースファイルに関連付けられている空き領域内でロックデータベースを配布しています。グローバルディレクトリエディタ(GDE)は、グローバルディレクトリを作成しメンテナンスができます。GT.Mは、同じ名前の変数をマップするために使用されるデータベースの領域でキャレット記号 (^) で始まるリソース名のロックを関連付けます。もしグローバルディレクトリが ファイル A.DAT へ 名前(NAME) ^A をマップしている場合、GT.Mは、A. DATに対応する共有メモリの制御構造で実装されているロックスペースへリソースの名前(NAME) ^A のすべてのロック(LOCK on) をマップします。GT.Mは、GDEコマンド LOCKS -REGIONで指定されたデータベースの領域(REGION)へキャレット記号 (^)で始まっていない名前のロックをマップします。

デフォルトでは、GDEは、領域(REGION) のDEFAULTへ "local" ロックをマッピングするグローバルディレクトリを作成します。

同じ名前でグローバル変数と同じ領域で、^LOCKsを関連付けているので、^LOCKSは、任意のデータベースファイル内の同じデータのすべてのユーザーに対して自動的に相交わります。

ユーザーが異なったグローバルディレクトリを介してデータベースにアクセスする可能性があるため、"ローカル" LOCKの交点はグローバルディレクトリに依存しています。2つのプロセスの "local" ロックは、同じロックリソース名が同じデータベースの領域にマッピングする場合にのみお互いに相互作用をします。

参照

inserted by FC2 system