[Moscow.pm] Синхронно-асинхронная инициализация одинаковых процессов
Sergey Aleynikov
sergey.aleynikov на gmail.com
Пн Мар 22 03:02:59 PDT 2010
Hello,
> $lockfile = "/var/tmp/pradm_memcached_config_load.lock";
> if(!-f $lockfile)
> {
> print STDERR "$$ Creating lock file\n";
> open OUT,">$lockfile" or die "Cannot write to $lockfile $!";
> print OUT $$;
> close OUT;
> $lock = 1;
> }
Поздравляю, у вас race между -f и "open OUT". Да ещё и print, чтобы
race'y было проще сработать :)
Посмотрите на cpan'e, там точно есть что-либо. Правильный алгоритм -
это либо открыть, попробовать сделать flock() - получилось, наш файл.
Либо создавать файл с O_EXCL - тогда открыть не получится, если файл
уже создан.
Best regards,
Sergey Aleynikov
Подробная информация о списке рассылки Moscow-pm