2002/07/26 (金) 02:18:17        [mirai]
基本的にロック機構とはプログラム言語の問題ではなく「私が使用
している間は他のプログラムがこのファイルを使用しないようにして
ください」とOSに頼む事になるので、その頼み方はそれぞれのOSで異
なった固有の部分なのです。

さらに追求するならば「ロックをサポートしている」とOSのドキュメント
に書かれていても、本当に問題がないかどうかについてはその実装の質
によります。爆弾マークや青い画面などを思いおこして頂ければわかり
やすいかもしれませんが、筆者はこれらの原稿を書くにあたって幾つか
のOSでサンプルコードを実行し、某商用Unix上で再現性のない奇妙な現象
に遭遇した事もあります。

実際にテストコードを書き、バックグラウンドで多数のプロセスを同時
に実行しても問題がないか確かめましょう。

1. flockはflock(2)か、fcntl(2)か、lockf(3)、又はその他OSのネイティブ
   なシステムコールによって実装されている。
2. lockf(3)によって実装されたflockは共有ロックを提供しない。又、引数
   としてわたされたファイルハンドルが書き込み用に開いたものでなけれ
   ばならない。
3. NFS上のファイルをロックできないものがある。この問題はPerlを
   コンパイルする時にfcntl(2)でflockをエミュレートするように指定すれ
   ば解決できるときもあるが、これもシステム依存である。
4. 大部分のOSではflockは勧告ロック(advisory lock)として実装されて
   いる。これに対して、強制ロック(mandatory lock)と呼ばれるものも
   存在する。両者の違いは勧告ロックは赤信号で車を止める事に相当し、
   強制ロックは検問で車を止める事に相当する。すなわち、勧告ロック
   の場合は赤信号を守らない、つまりflockを使用しないプロセスが傍若
   無人にアクセスする事を防げない。ファイルのオープンをロックする
   のではなく、ロックしたファイルハンドルに更にロックをかける事を
   防いでいるという点を理解しておく事。一見、強制ロックの方が良い
   ように思えるかもしれないが、協調しないプロセス同士ではどのような
   ロックでも結局上手くいかない。