【Perl】ファイルロック(排他処理)について語ろうat PHP【Perl】ファイルロック(排他処理)について語ろう - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト842:nobodyさん 05/12/09 16:10:37 >>841 致命的にやばい点: ENDの中でlockファイルをcloseした時点でflockは外れるので、 その後のunlockとtmpファイルのrenameがロックなしで行われる。 改善した方がいい点: readしかしない場合でも排他的にロックしてしまうのは嬉しくない。 ENDが実行されるまでロック状態が持続するので、ロックの保持 期間が長くなりそうだしdaemon的プログラムだとどうすんの? tmpの書き込み中に問題がでて取りやめたいときの手段がない (やろうと思えば%filelock::_lockいじる手はあるが...) リトライ回数が尽きたときにいきなりexitするのは汎用性がない。 せめてdieにしとけばevalでトラップする余地があるのだが。 843:833 05/12/09 17:26:00 >unlockとtmpファイルのrenameがロックなしで行われる。 そうですね。renameは一番最初にやるとして、その後にunlink→ closeでしょうか?closeの前にunlinkってできるのでしょうか? >readしかしない場合でも排他的にロックしてしまうのは嬉しくない。 ここでは省略しましたが、 unlockFile( $filename ) 機能 : 強制的に指定されたファイルのロックを解除する。 というルーチンがあります。自分は、デフォルトは「最後まで排 他的にロック」。オプションで「指定したファイルのロックを解除」 っていう感じで考えてます。この方が間違いが無いと思うので。 >tmpの書き込み中に問題がでて取りやめたいときの手段 そうですね。これは、abortLockみたいなルーチンを作って最後の ENDブロックの中でrenameしないようにすれば良いんじゃないで しょうか? >リトライ回数が尽きたときにいきなりexitするのは汎用性がない。 if( $count++ > 10 ) { die "flock busy" } こんな感じで良いですかね? まだまだ経験が浅いので、先輩諸氏からの助言は為になります。 他にも欠点や改良点があれば指摘して頂けるとありがたいです。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch