Tukubaiオンラインコマンドマニュアル - ulock(1)
ulock(1)
【名前】
ulock
: 排他制御コマンド
【書式】
Usage : ulock <lock-file> Usage : ulock -w <lock-file> [<counter-file>] ulock -r <lock-file> <counter-file> <command> Option : --timeout=<sec>/--invalid=<sec> Version : Fri Oct 21 11:26:06 JST 2011 Edition : 1
【説明】
書式1(ulock <lock-file>
)は、完全排他区間を実現します。この場合、ulock
は排他的に<lock-file>
を生成します。
書式2は、リード・ライトロックを実現します。-w
(ライトロック)の場合、ulock
は排他的に<lock-file>
を生成した上に、<counter-file>
のリンクカウントが1になるまで待ちます。-r
(リードロック)の場合、<lock-file>
が存在しなくなるまで、<counter-file>
のリンクカウントを1増やすことを試み、成功したら、<command>
を実行し、そのあと、<counter-file>
のリンクカウントを1減らします。
--timeout
オプションでcomma
nd が起動されるまでの待ち時間の最大値を指定できます。-1 を指定すると無限に待ちます。デフォルトは -1 (無限に待つ)です。
--invalid
オプションで古いロックファイルの削除を行います。デフォルトは 60 秒です。
【例1】 完全排他区間の実現
$ cat lock.sh #!/bin/bash if ulock lock; then # # 読み書きなどの処理 # rm -f lock fi
【例2】 リードライトロックの実現
$ cat writelock.sh #!/bin/bash if ulock -w lock counter; then # 書き込み処理(例) up3 key=1 master tran > master.new mv master.new master rm -f lock fi
$ cat readlock.sh #!/bin/bash ulock -r lock counter cat master
【備考】 リードライトロックのアルゴリズム
ライトロック
X--書き込みロックを取る。(アトミック)
X--カウンタ1まで待つ。
---書き込み処理
---書き込みロックをはずす。
リードロック
X--カウンタを1足す。(アトミック)
X--書き込みロックがないことを確認。ロックされていれば 1 減らして戻る。
X--読むだけの処理
X--カウンタを1減らす (アトミック)
ulock
では書き込みロックはハードリンクファイル生成の一意性を利用し、カウンタオペレーションは、ハードリンクファイルのリンク(一意)数を利用しています。ulock
は上記アルゴリズムのうち、X の部分を実装しています。
lock-file
、counter-file
ともNFS
上に作成すれば、各サーバーからのリードライトロックが実現します。