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オプションでcommand が起動されるまでの待ち時間の最大値を指定できます。-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-filecounter-fileともNFS上に作成すれば、各サーバーからのリードライトロックが実現します。

Last modified: 2022-08-13 08:42:37