Попробуйте использовать flock
- вот простой пример, который вы можете попытаться понять его поведение:
use strict;
use warnings;
use Fcntl qw/:flock/;
chomp(my $id = `date`);
my $cnt = 0;
while (1) {
open LOG, ">>shared" or die "Couldn't open shared";
flock (LOG, LOCK_EX) or die "Couldn't flock";
print LOG "$id: $cnt\n";
$cnt++;
sleep 1;
close LOG;
}
Скажите, что это сохранено в flock.pl, тогда вы можете запустить flock.pl&
для запускаодин или несколько экземпляров в фоновом режиме.Затем сделайте tail -f shared
, чтобы увидеть, что происходит.Поскольку вы спите 1 секунду между получением блокировки и ее снятием с помощью close LOG
, вы будете обновляться раз в секунду, если у вас есть один процесс.Однако, если у вас есть N процессов, вы увидите, что каждый из них занимает N секунд.
В существующем примере вы можете попробовать добавить строки use Fcntl
и flock
.