例
以下の例は、排他ロックの場合に info_type キーワードにより返される値を示しています。
LOCK ^B(1,1) ; define lock
WRITE !,"lock owner: ",^$LOCK("^B(1,1)","OWNER")
WRITE !,"lock flags: ",^$LOCK("^B(1,1)","FLAGS")
WRITE !,"lock mode: ",^$LOCK("^B(1,1)","MODE")
WRITE !,"lock counts: "
ZZDUMP ^$LOCK("^B(1,1)","COUNTS")
LOCK -^B(1,1) ; delete lock
以下の例は、排他ロックの増減によって info_type の "COUNTS" で返される値がどのように変化するかを示しています。
LOCK ^B(1,1) ; define exclusive lock
ZZDUMP ^$LOCK("^B(1,1)","COUNTS")
LOCK +^B(1,1) ; increment lock
ZZDUMP ^$LOCK("^B(1,1)","COUNTS")
LOCK +^B(1,1) ; increment lock again
ZZDUMP ^$LOCK("^B(1,1)","COUNTS")
LOCK -^B(1,1) ; decrement lock
ZZDUMP ^$LOCK("^B(1,1)","COUNTS")
LOCK -^B(1,1) ; decrement lock again
ZZDUMP ^$LOCK("^B(1,1)","COUNTS")
LOCK -^B(1,1) ; delete exclusive lock
以下の例は、共有ロックの増減によって info_type の "COUNTS" で返される値がどのように変化するかを示しています。
LOCK ^S(1,1)#"S" ; define shared lock
ZZDUMP ^$LOCK("^S(1,1)","COUNTS")
LOCK +^S(1,1)#"S" ; increment lock
ZZDUMP ^$LOCK("^S(1,1)","COUNTS")
LOCK +^S(1,1)#"S" ; increment lock again
ZZDUMP ^$LOCK("^S(1,1)","COUNTS")
LOCK -^S(1,1)#"S" ; decrement lock
ZZDUMP ^$LOCK("^S(1,1)","COUNTS")
LOCK -^S(1,1)#"S" ; decrement lock again
ZZDUMP ^$LOCK("^S(1,1)","COUNTS")
LOCK -^S(1,1)#"S" ; delete shared lock
以下の例は $DATA、$ORDER、$QUERY 関数に対して、^$LOCK を引数として使用する方法を表しています。
$DATA に対する引数としての ^$LOCK
$DATA(^$|nspace|LOCK(lock_name))
^$LOCK は $DATA に対する引数として、ロック名が ^$LOCK 内のノードとして存在するか否かを示す整数値を返します。以下のテーブルは、$DATA が返すことができる整数値を示しています。
値 |
意味 |
0 |
ロック名情報は存在しない |
10 |
ロック名情報が存在する |
このコンテキストで使用される $DATA が返すことができるのは、0 または 10 だけであることに注意してください。10 は、指定したロックが存在することを意味します。ロックに下位ノードがあるかどうかを判断することや、1 や 11 を返すことはできません。
以下の例は、現在のネームスペースにロック名が存在するかどうかを調べています。最初の WRITE は 10 を返し (ロック名が存在する)、次の WRITE は 0 を返します (ロック名が存在しない)。
LOCK ^B(1,2) ; define lock
WRITE !,$DATA(^$LOCK("^B(1,2)"))
LOCK -^B(1,2) ; delete lock
WRITE !,$DATA(^$LOCK("^B(1,2)"))
$ORDER に対する引数としての ^$LOCK
$ORDER(^$|nspace|LOCK(lock_name),direction)
^$LOCK は $ORDER に対する引数として、指定したロック名に対する照合順序で、次または前の ^$LOCK ロック名ノードを返します。そのようなロック名が ^$LOCK ノードとして存在しない場合、$ORDER は NULL 文字列を返します。
ロックは、大文字/小文字を区別する文字列照合順で返されます。名前付きロックの添え字は、数値の照合を使用して、添え字ツリー順で返されます。
direction 引数は、次のロック名を返すか、前のロック名を返すかを指定します。direction 引数を指定しない場合、InterSystems IRIS は、指定したロック名に対する照合順序で、次のロック名を返します。詳細は、"$ORDER" 関数を参照してください。
以下のサブルーチンは SAMPLES ネームスペースにあるロックを検索し、LOCKET というローカル配列にあるロック名を格納します。
LOCKARRAY
SET lname=""
FOR I=1:1 {
SET lname=$ORDER(^$|"SAMPLES"|LOCK(lname))
QUIT:lname=""
SET LOCKET(I)=lname
WRITE !,"the lock name is: ",lname
}
WRITE !,"All lock names listed"
QUIT
$QUERY に対する引数としての ^$LOCK
$QUERY(^$|nspace|LOCK(lock_name))
^$LOCK は $QUERY に対する引数として、指定したロック名に対する照合順序で、次のロック名を返します。^$LOCK のノードとして定義された次のロック名が存在しない場合は、$QUERY は NULL 文字列を返します。
ロックは、大文字/小文字を区別する文字列照合順で返されます。名前付きロックの添え字は、数値の照合を使用して、添え字ツリー順で返されます。
次の例では、現在のネームスペースに 5 つのグローバル・ロック名が (順不同で) 作成されます。
LOCK (^B(1),^A,^D,^A(1,2,3),^A(1,2))
WRITE !,"lock name: ",$QUERY(^$LOCK(""))
WRITE !,"lock name: ",$QUERY(^$LOCK("^C"))
WRITE !,"lock name: ",$QUERY(^$LOCK("^A(1,2)"))
$QUERY は、添え字付きまたは添え字なしのすべてのグローバル・ロック変数名を文字列として処理し、文字列照合順序内で取得します。したがって、$QUERY(^$LOCK("")) は、照合順序で最初のロック名 (^$LOCK("^A") またはより照合順序の高い InterSystems IRIS 定義ロック) を取得します。$QUERY(^$LOCK("^C")) は、照合順序内で、存在しない ^C の次に当たるロック名 ^$LOCK("^D") を取得します。$QUERY(^$LOCK("^A(1,2)")) は、照合順序内でその後に続く ^$LOCK("^A(1,2,3)") を取得します。