Главная страница


ru.cgi.perl

 
 - RU.CGI.PERL ------------------------------------------------------------------
 From : Konstantin Tokar                     2:5020/400     30 Jan 2003  13:00:58
 To : Alexander Ponomarenko
 Subject : Re: Counter
 -------------------------------------------------------------------------------- 
 
 >  KT> Гонки. Задай в гугле поиск по 'race condition гонки' - получишь
 >  KT> подробный ответ. Проблема простая - твой алгоритм неправильный. Hадо
 >  KT> 1) заблокировать файл
 >  KT> 2) прочитать
 >  KT> 3) обновить
 >  KT> 4) записать
 >  KT> 5) разблокировать
 > Приведи пример плиз.
 > Разве вот так неправильно?
 > 
 > open(Q,"qq");
 > flock(Q,LOCK_SH);
 > <читаем>
 > close(Q);
 > 
 > для записи то же самое, только LOCK_EX.
 > 
 > Если так неправильно, тогда как правильно?
 
 Правильно ты всё пишешь, тебе только надо оставить только один lock, 
 например (мне такой пример кажется правильным, возможно кто-то меня 
 поправит?):
 
 open LOCK, 'counter.lock';
 flock(LOCK,LOCK_EX);
 eval {
   open IP, ...
   open COUNTER, ...
   open PIC, ...
 
   переписать счётчик
 
   close PIC;
   close COUNTER;
   close IP;
 };
 flock(LOCK,LOCK_UN);
 close LOCK;
 
 Я специяльно заблокировал не тот файл, который читаю.
 
 Вообще, такая схема будет работать не везде, какие-то глюки должны быть 
 на NFS, но это мелочи. А ещё может проще будет использовать какой-нибудь 
 mutex.
 
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Counter   Alexander Ponomarenko   18 Jan 2003 18:47:33 
 Re: Counter   Artem Chuprina   19 Jan 2003 14:33:24 
 Counter   Alexander Ponomarenko   21 Jan 2003 13:36:59 
 Re: Counter   Konstantin Tokar   24 Jan 2003 12:46:44 
 Counter   Alexander Ponomarenko   29 Jan 2003 14:25:08 
 Re: Counter   Konstantin Tokar   30 Jan 2003 13:00:58 
Архивное /ru.cgi.perl/127708928679d.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional