CGI-BBS > CGI > Perl > lockについて


カレッヂ
カレッヂ


質問者 vagabond  投稿日 10/3(水) 02:32:54
データベースとかでない普通のファイルをlockするとき、process IDとかを使った
一時ファイルを作ってやるのと、flockを使う場合のどちらが安全なんでしょうか。
回答者 呑兵衛  [削除]  投稿日 10/4(木) 22:59:31
呑兵衛@大阪です。

データのことなら、どちらも消失率は同じ、でしょうね。
symlink でも消えます。
rename でもダメな時があります。
共有サーバーには、他のユーザーの実行環境でメモリオーバーが起こったとき
対処のしようがありませんでしょう。

とりあえず、書きこむ直前にダミーのファイルを書きこみ、
ファイルに書きこんだバイト数が存在すれば、ユーザからの書き込みを許し、
symlink なり flockなりを施し、$$.tmp でファイルを作り、
ファイルが存在し、かつそれなりのバイト長があれば、旧ファイルをunlink、
$$.tmp を rename、ロックを解除。
ここまでやっても消えるときは消えますね。
なので、バックアップファイルも同時に作っておく。
独立したデータでなければ、追加書きこみ >> にて対処。
くらいですかね。
質問者 vagabond  [削除]  投稿日 10/7(日) 02:54:41
大変丁寧にlockの仕方を解説していただいてありがとうございます。

うーん、消えちゃう時は消えちゃうって、デッドロックとかでデータの消失がありえる
ってことですね。そうすると、デッドロックにも対応した非常に安定したlockモジュール
とかあると便利ですね。CPANで探してみます。

返信(回答)する


Web裏技