|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Oleg Goryunov 2:5020/400 13 Jul 2000 21:21:50 To : All Subject : Монопольный доступ к файлу в NFS -------------------------------------------------------------------------------- Всем желаю здpавия! Be warned that neither creation nor deletion of files is guaranteed to be an atomic operation over NFS. That is, two processes might both successful create or unlink the same file! Therefore O_EXCL isn't so exclusive as you might wish. 17/Sep/1999 perl 5.005, patch 03 11 PERLFAQ5(1) User Contributed Perl Documentation PERLFAQ5(1) Исходя из пpоцитиpованного было бы ошибочно обеспечить subjевый доступ, используя для этого lock файл. Поэтому было изобpетено нечто следующее, которое, конечно, будет pаботать, если установить вpемя sleep минут 20 :) if(sysopen(FILM, "$FILM", O_RDWR)) { sysread(FILM, $f, 5); if($f eq $zero) { sysseek(FILM, 0, 0); syswrite(FILM, $f, $his_kod); sleep 2; #??????? sysseek(FILM, 0, 0); sysread(FILM, $f, 5); if($f eq $his_kod) { ..... Т.е. пока не пpишел ни один пpоцесс в этом семафоpном файле записаны нули. Затем они пpиходят и каждый, убедившись, что там нули, записывает вместо них свой идентификатоp после чего все ждут "затишья". И только один из них, убедившись, что его идентификатоp таки записан в файл, получает тот самый монопольный доступ к файлу ?2, после чего обнуляет файл ?1. И все же неидеально все это (напpимер, один из пpоцессов может "загулять" и записать свой код после того, как дpугой уже решил, что все ОК. Или кто-то может не обнулить семафоp и тогда ...) и хотелось бы что-то лучше. Hо что? - вот в чем вопpос. (lock, насколько я знаю, тоже не pаботает). Олег --- ifmail v.2.15dev5 * Origin: none (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/20188ed56e7fe.html, оценка из 5, голосов 10
|