[so] De ce TLS ? - continuare:)
Cosmin Arad
so@atlantis.cs.pub.ro
Wed, 26 Nov 2003 09:24:40 -0800 (PST)
--- Cibu Cristian <cibu.cristian@rdslink.ro> wrote:
> pe mine m-a ametit putin chestia cu destroy.
>
> este evident ca trebuie sa existe un destroy dur
> care sa curete tot fara sa
> faca nici o verificare.
>
> acum, din cate am inteles, trebuie sa avem un
> destroy care curata doar daca
> nu are nimeni treaba cu monitorul.
> cineva are treaba cu monitorul daca se afla in vre-o
> coada sau daca este
> activ. Dar cum destroy-ul se da dintr-un thread care
> care se presupune ca nu
> are nici o legatura cu threadurile care folosesc
> monitorul este destul de
> complicat modul in care se determina daca monitorul
> este sau nu folosit.
>
> de exemplu:
>
> in destroy ma apuc sa verific daca este cineva
> blocat la o conditie. pp ca
> nu este, dar imediat ce fac verificare vine un
> thread care se blocheaza
> exact la variabila aia conditie. neplacut. trebuie
> deci sa impiedicam
> accesul la monitor in timp ce incerc sa distrug
> monitorul. singurul mod in
> care vad facandu-se asta (doar cu resursele
> monitorului) este ca threadul
> care face destroy sa fie el insusi activ in monitor
> (adica sa fi dat in
> prealabil un enter()).
>
> si de aici contradictia: distrug monitorul numai
> cand nimeni nu foloseste
> monitorul, dar pentru ca sa vad ca monitorul este
> liber tocmai cel care
> distruge trebuie sa fie in monitor. (presupun ca se
> face o exceptie :) ).
Da, poti sa iei lockul asociat cozii Entry ca sa faci
destroy.
> Eu sincer inclin spre existenta unei singure functii
> destroy (cea care
> omoara tot si abia apoi intreaba), dar pe care o
> apelez cu grija dupa ce
> toate threadurile nu mai au nevoie de monitor.
> prefer deci sa fie de datoria
> aplicatiei care foloseste monitorul sa se asigure de
> corectitudinea
> folosirii lui destroy.
Ambele sunt necesare, cea care omoara tot sa fie
apelata doar in cazuri extreme in care nu te mai
intereseaza ce se intampla cu monitorul in continuare.
Cosmin
__________________________________
Do you Yahoo!?
Protect your identity with Yahoo! Mail AddressGuard
http://antispam.yahoo.com/whatsnewfree