トランザクション内でロック(Lock)の使用

トランザクション内で、LOCKは、シリアライズする能力を確保するためGT.Mによって使用されます。トランザクションで保持しているLOCKを調べるために他のプロセスによる試みは、LOCKがトランザクションの外にいる時と同じ結果を生成することは、しかしながら、保証はありません。言い換えると、トランザクション内でLOCKは、シンプルセマフォとして使用しないでください。

LOCKコマンドは、ツリー構造の名前空間を制御する指定されたリソース名をLOCKクします。環境内で1つのプロセスがある時、トランザクションの外では、名前付きリソースでLOCKまたはZALLOCATEを取得し、最初のプロセスがそれが保持するLOCKを解放するまで、その環境内の他のGT.Mプロセスは、"重複:overlapping" の名前を持つリソースはLOCKできません。

トランザクション内でLOCKの使用方法については、 第5章: “Mの一般的な言語特徴を参照してください。

LOCK コマンドの操作サマリ

コマンドの発行

LOCKの結果

コメント

L

none

以前のすべてのロックを解除

L A

A

以前のLOCKを解除し、次に、AをLOCK

L

L +A

 

A

このシーケンスは、L A と同等です

L A

L -A

 

none

Aをロックする前に以前のロックを解除し、次にAのロックを解除します。これはL A Lと同等です。

L A

L +A

L -A

 

 

A

Aをロックする前に以前のロックを解除し、以前のAのロック解除なしでAをインクリメンタル ロックし、以前のAのロック解除なしでAをデクリメント ロックします。

L A

L +B

 

A,B

Aをロックする前に以前のロックを解除し、次にAの解除なしでBをロックします。

L A,B

B

Aをロックする前に以前のロックを解除し、AをunLOCKし、次にBをロックします。

L (A,B)

A,B

AとBを同時にロックする前に以前のロックを解除します。

L A

L +B

L +C

 

 

A,B,C

Aをロックする前に以前のロックを解除し、Aの解除なしでBをロックし、AとBとを解除なしで C をロックします。

L A

L +(B,C)

 

A,B,C

Aをロックする前に以前のロックを解除し、Aの解除なしでBとCを同時にロックします。

L (A,B,C)

L -B

L -C

 

 

A

AとBとCとを同時にロックする前に以前のロックを解除し、AとCとの解除なしでBをロックし、Aの解除なしで C のロックを解除します。

L (A,B,C)

L -(B,C)

 

A

AとBとCとを同時にロックする前に以前のロックを解除し、Aの解除なしでBとC のロックを解除します。

L (A,B)

L -B

 

A

AとBとを同時にロックする前に以前のロックを解除し、Aの解除なしでB のロックを解除します。

LOCKの例

例:

Lock A,^B,@C
Lock (A,B,@C)

最初のロックコマンドは、AをLOCKし、^BをLOCKする前にAのLOCKを解除します、次に、変数Cで指定された名前をロックする前に^Bのロックを解除します。2番目のLOCKコマンドは、一度に3つすべてのリソースを取得します。すべてのリソースをLOCKする前に、引数リスト内のすべての名前付きのリソースが利用可能になるまで、GT.Mは待機します。例えば、もし変数Cで指定されたリソースがLOCKするために利用できない場合、Aと^BをLOCKする前にそのリソースが利用可能になるまで、GT.Mは待機します。

例:

LOCK (A,B)
LOCK +C
LOCK -B

これはAとBとをLOCKし、次にCをインクリメンタルLOCKします。最後に、AとCのLOCKを保持しながら、BのLOCKを解放します。

例:

LOCK (A,B,C) 
LOCK +(B,C)
LOCK -(B)

これは AとBとCを一緒にLOCKします。それは、BとCのロック "カウント" をインクリメントします。最後のLOCKコマンドは、Bの1つの"カウント" と、AとBとの1つのカウントを残したままで、Cの2つのカウントを解除します。

例:

LOCK ^D:5

このコマンドは、5秒のタイムアウトで ^DをLOCKしようとしています。もしタイムアウトが経過する前にLOCKが名前付きリソースを取得した場合、GT.Mは$TESTを1(TRUE)にセットします。もしタイムアウト時間が経過する前にLOCKが名前付きリソース取得に失敗した場合は、GT.Mは$TESTに 0(FALSE)をセットします。

inserted by FC2 system