Forum Webscript.Ru

Программирование => Perl => Тема начата: frenky от 11 Января 2005, 19:08:58

Название: Блокировка
Отправлено: frenky от 11 Января 2005, 19:08:58
Вот функция блокировки
sub get_lock {
open(SEM,  ">s.sem") ;
flock(SEM,LOCK_EX) || "Cant block the file:$!";
}
sub relase_lock {close(SEM); }


get_lock();
dbmopen(%za,"kgames",0666) || die;

get_lock();
dbmopen(%zaz,"kgames1s",0666) || die;
dbmclose(%za);
relase_lock();

dbmclose(%zaz);
relase_lock();

Тут заблокируються обе базы или одна и таже два раза?
Название: Блокировка
Отправлено: NeoNox от 11 Января 2005, 19:19:19
ты совершенно неправильно делаешь
perldoc -q lock
Название: Блокировка
Отправлено: frenky от 11 Января 2005, 21:51:22
что то я так и не нашел там примера бля блокировок dbm файлов
Название: Блокировка
Отправлено: Green Kakadu от 12 Января 2005, 10:46:50
Цитировать
frenky:
Тут заблокируються обе базы или одна и таже два раза?

ты при втором вызове get_lock(); не получишь блокировки, т.к. она уже включена, поэтому передавай какой-нибудь идент-р ф-ции блокировки, типа get_lock(\'kgames1s\');
sub get_lock {
my $name=shift||\'default\';
open($name, ">$name.sem") ;
flock($name,LOCK_EX) || "Cant block the file $name:$!";
}
sub relase_lock {
$name=shift||\'default\';
close($name);
 }


Цитировать
frenky:
что то я так и не нашел там примера бля блокировок dbm файлов

да, с этим есть проблемы. Помнится есть модули для блокировки, почитай раздел Safe ways to lock a database вот тут:
http://search.cpan.org/~pmqs/DB_File-1.810/DB_File.pm
Название: Блокировка
Отправлено: frenky от 12 Января 2005, 12:48:48
Вот еще какая проблема на хостинге не установлен модуль DB_File.pm
Название: Блокировка
Отправлено: Green Kakadu от 12 Января 2005, 13:36:05
Цитировать
frenky:
на хостинге не установлен модуль DB_File.pm

ну тогда юзай Any_DBM, хотя если собираешься делать что-то серьезное на DBM, то лучше бы обзавестись и если все совсем серьезно, работать не через DB_File, а через BerkeleyDB, т.к.  DB_File представляет лишь минимальную часть функция для работы с базами Berkeley (т.е. ни транзакций, ни блокировок)
Название: Блокировка
Отправлено: frenky от 12 Января 2005, 15:22:16
ну а почему блокировка представленная віше не проконает?
Название: Блокировка
Отправлено: NeoNox от 12 Января 2005, 15:32:42
Потому что ты не понимаешь что ты написал.
Прокомментируй каждую строчку.
Название: Блокировка
Отправлено: Green Kakadu от 12 Января 2005, 15:33:30
Цитировать
frenky:
ну а почему блокировка представленная віше не проконает?

сгодится, только нужно при блокировке к каждой БД добавить идентификатор. А то ты используешь один файл для блокировки всех БД, т.е. для каждой БД нужно использовать свой блокировочный файл
Цитировать
Green Kakadu:
get_lock(\'kgames1s\');

sub get_lock {
my $name=shift||\'default\';
open($name, ">$name.sem") ;
flock($name,LOCK_EX) || "Cant block the file:$!";
}

sub relase_lock {
$name=shift||\'default\';
close($name);
}
Название: Блокировка
Отправлено: frenky от 12 Января 2005, 15:39:37
understood  
thanks