[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