つまり、ロックじゃなくてrename()を使うというのと、意味合いは同じです。
(rename()はアトミックだから)

というわけで今の処理、
http://qb3.2ch.net/test/read.cgi/operate/1076174286/490 の、
490 名前:FOX ★[] 投稿日:04/02/24 22:13 ID:???
bbs.cgi のもっとも後半部分にこんなのがあるですよ。

open(RDAT,"<$dattemp");
@logdat=<RDAT>;#ログを配列に読み込む
close(RDAT);

#ログのカキコ数を取得
$lognum = @logdat;
if(-w $dattemp && $lognum > 999){
open(OVER, ">>$dattemp");
print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OVER);
chmod(0555, $dattemp);
$lognum++;

を、

print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
fchmod(0555, OVER);
close(OVER);
$lognum++;

にすればいいんではないかなと。

# Perlよくしらないから、0555とOVERの順番は逆かも。
つかCのchmod()と引数の順番反対な気が。< Perl