Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Lock() 関数と Unlock() 関数 (1)

generated description: locktable

ここでは Lock() および Unlock() の機能と使用法について学習します。ロックする場合、システムはロック・テーブルに Lock() コマンドの引数を追加します。別のプロセスで同じレコードをロックしようとすると、最初のロックが解除されるまでそのプロセスを待機します。2 番目のプロセスが異なるレコードを編集し、レコードを Lock() すると、システムはロック・テーブルにもそのレコードを追加します。処理がうまくいくと Lock()True を返しますが、それ以外の場合は False を返します。Lock() の 2 番目の引数は、タイムアウトの秒です。処理が指定時間内に正常終了しない場合、Lock()False を返します。

以下の例を実行する前に、管理ポータル ([システム・エクスプローラ] セクション) を使用して、システム, ロック に移動し、ロック・テーブルを確認します。例を実行すると、完了するまで数秒かかるためロックを表示できます。[ロック・テーブル] フォルダをクリックすると、表示を更新できます。


if lock(^x(1),3) then
    println "lock successful"
    ' wait several seconds so lock remains in Lock Table
    for i = 1 to 100000000 : next i 
else
    println "lock failed"
end if

ロックが失敗した場合、ターミナルと ObjectScript Lock コマンドを使用して、同じ項目をロック・テーブルに追加します。その後上記コードを実行します。


SAMPLES>lock ^x(1) ; add ^x(1) to the Lock Table before running example

SAMPLES>lock       ; to remove ^x(1) from the Lock Table afterwards

myBASlookup ルーチンの次の段階では、ユーザが個人データを修正できるコードを記述します。つまり、^PersonD グローバルと ^PersonI グローバルを更新します。この場合、ユーザが更新するレコードと特定の ID をいったん選択すると、これをルーチン lock(^PersonD(id)) へ追加します。新規データを格納した後、unlock(^PersonD(id)) を使用してレコードのロックを解除します。

FeedbackOpens in a new tab