排他制御とか

よく分からないままに色々試してみる。
更新さえアトミックにやってもらえればその後の表示でずっこけたところで大したダメージではないと割り切って進む。

まずサーバの CGI 実行時間制限を疑い、重い更新処理を fork してみた。これで親プロセスがタイムアウトで kill されても子プロセスはスルーされて処理を完遂するはずだ。多分。しかし根拠はない。

次にロックファイルを用意し、flock で排他をかけた。ただし File::LOCK_EX だけでは本当にブロックされているのか疑念が拭いきれず、flock(File::LOCK_EX | File::LOCK_NB) が false だったらログを取りつつ sleep & retry、という手法に変更。着手理由が阿呆そのものではあるが、ログ上は排他制御の動き見易くなったので無駄ではなかったと思いたい。


次の更新は 11/21 未明。起きてられんがな。