最終更新日 2002年12月24日 up top

Perlのflock

flockはflockをロックする。

間違い

#!/usr/bin/perl

open FILE, 'counter.txt';
$counter = <FILE>;
close FILE;

$counter ++;

open FILE, '>counter.txt';
flock FILE, 2;

print FILE $counter;

close FILE;

プロセスAが書き込み用にcounter.txtをopenしたとき、 counter.txtは0になる。そのときにプロセスBがcounter.txtをopenし、 読み込むと、プロセスBの$counterは0になり、 結果counter.txtにはプロセスBによって1が書き込まれる。

正しい

#!/usr/bin/perl

open FILE, '+<counter.txt';
flock FILE, 2;

$counter = <FILE>;
$counter ++;

truncate FILE, 0;
seek FILE, 0, 0;

print FILE $counter;

close FILE;