uzavreni spojeni s databazi pri exitu potomka

Josef Zlomek josef.zlomek na email.cz
Čtvrtek Červenec 31 07:00:48 MEST 2003


> > Ahoj, > > 
> > ve skriptu se nejdriv pomoci DBI pripojim na MySQL databazi,
> > pak naforkuju nekolik potomku, potomci pracuji s databazi, ale pomoci
> > semaforu hlidam, aby s ni pracoval jen jeden v konkretnim case.
> > Problem je, ze kdyz nektery z potomku zavola "exit 0;", spojeni se uzavre.
> > Nevite nekdo, cim by to mohlo byt? Diky.
> ako to robite s tymi semaformi?
> to by ma vazne zaujimalo..
> nikdy som nic take neriesil a uplne kludne som si selectoval, etc...

Nejdriv si vytvorim semafor a nastavim mu hodnotu 1:

use IPC::SysV qw(IPC_CREAT IPC_PRIVATE SEM_UNDO S_IRWXU);
use IPC::Semaphore;

$sem = new IPC::Semaphore (IPC_PRIVATE,
                           1,	# pocet semaforu v mnozine
                           S_IRWXU | IPC_CREAT);
exit if (!defined $sem);
$sem->setall (1);	# hodnota nastavovana vsem semaforum v mnozine

Pak kdyz chci pracovat s databazi (tj. normalni "kriticka sekce"),
tak ho proste snizim:

$sem->op (0,	# poradove cislo semaforu v mnozine
          -1,	# o kolik hodnotu semaforu menim
          SEM_UNDO);	# kdyz proces chcipne, chci operaci zrusit a vratit stav zpet

A kdyz koncim, tak zase zvysim:

$sem->op (0,	# poradove cislo semaforu v mnozine
          1,	# o kolik hodnotu semaforu menim
          SEM_UNDO);	# kdyz proces chcipne, chci operaci zrusit a vratit stav zpet

Pepa


Další informace o konferenci Perl