uspTukubaiコマンドに関する様々な資料がここにあります。

 

 

魂内検索

DOCUMENTS

COMMAND

FORUM

UEC DOCS

VIDEO

 

ABC順リスト |  カテゴリ別リスト

(動画教材準備中)

ulock

<概要>

ulock : 排他制御コマンド

<書式>

Usage   : ulock <lock-file>
          ulock -w <lock-file> <counter-file>
          ulock -r <lock-file> <counter-file> <command>
Option  : --timeout=<sec>
          --invalid=<sec>
Version : Thu Oct 22 09:25:28 JST 2015
Edition : 1

<説明>

-w/-r オプション無しの場合(ulock <lock-file>)は完全排他区間を実現
します。この場合、ulock は排他的に <lock-file> を生成します。

-w/-r オプション有りの場合はリード・ライトロックを実現します。

-w(ライトロック)の場合は、ulock は排他的に <lock-file> を生成した
上に、<counter-file> のリンクカウントが1になるまで待ちます。

-r (リードロック)の場合、<lock-file> が存在しなくなるまで待ち、
<counter-file> のリンクカウントを1増やします。その後、<command> を
実行し、正常終了したら <counter-file> のリンクカウントを1減らします。
<command> が正常終了しなかった場合は、以下のメッセージを出力し、リン
クカウントは増やしたままにします。

Error(282)[ulock] : command '...' failed, file '...' is left.

--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-- カウンタ0まで待つ。
--- 書き込み処理
--- 書き込みロックをはずす。

-- リードロック
X-- リンクカウントに1を足す。(アトミック)
X-- 書き込みロックされていれば、リンクカウントを戻して、直前へ戻る。
X-- 読むだけの処理
X-- リンクカウントを1減らす (アトミック)

ulock では書き込みロックはハードリンクファイル生成の一意性を利用し、
カウンタオペレーションは、ハードリンクファイルのリンク数を利用してい
ます。ulock は上記アルゴリズムのうち、X の部分を実装しています。

lock-file counter-file とも NFS 上に作成すれば、各サーバーからのリー
ドライトロックが実現します。