[so] handler pentru semnale

Octavian Purdila so@atlantis.cs.pub.ro
Mon, 08 Dec 2003 11:46:39 +0200


On Mon, 8 Dec 2003 11:00:39 +0200, Cristian Zamfir <zamfir@fx.ro> wrote:

> 1. Daca folosim un handler pentru semnalele care apar cind se termina o
> operatie asincrona, nu imi dau seama cum putem sa sincronizam apelarea
> handlerului cu threadul nostru.
> Ma gindesc la urmatorul scenariu: Threadul care face cererile aio tocmai
> modifica ceva in coada de cereri (sa zicem un delete ca urmare a 
> terminarii
> cu succes a unei alte cereri). Tocmai in mijlocul operatiei se termina o 
> alta
> operatie asincrona si se executa handler-ul pentru acel semnal, de catre
> acest thread. Handlerul va face astfel acces nesincronizat la un anumit 
> index
> din coada (sa zicem ca primeste indexul ca parametru in structura 
> siginfo_t).
> Pe linga faptul ca indexul ar putea sa nu mai fie consistent, chiar si 
> coada
> ar putea sa nu mai fie, pentru ca tocmai se executa o operatie delete, si
> cozile de obicei se fac cu liste inlantuite. Chiar daca sincronizam in
> interiorul handler-ului accesul la coada, printr-un semafor, indexul, 
> care e
> primit ca parametru si nu poate sa fie sincronizat poate sa fie 
> inconsistent.
>

Poti sa blochezi semnalele in sectiunea critica.

> 2.Ce se intimpla in cazul in care doua cereri asincrone asociate 
> aceluiasi  thread se termina cam in acelasi timp?
>

Nimic special. Se genereaza doua semnale. Ca sa nu pierzi semnale,
e recomandata sa folositi semnale realtime.


tavi