[so] De ce TLS ?
Cosmin Arad
so@atlantis.cs.pub.ro
Wed, 26 Nov 2003 06:56:16 -0800 (PST)
--- iana ionel cristian <iana_ionelcristian@yahoo.com>
wrote:
> Salut
>
> Am cateva nelamuriri in legatura cu tema 3:
>
> 1. Exista problema verificarii daca firul care a
> apelat
> enter, wait, leave, etc., este firul activ. Este
> gresit
> daca in loc sa retin o variabila boolean folosind
> tls,
> procedez in felul urmator:
>
> - fiecare structura monitor retine id-ul firului
> activ
>
> - atunci cand se executa o functie, (de ex enter)
> verific sa am idActiv = 0, dupa care fac idActiv =
> idFirCurent. Sau pentru leave verific sa am idActiv
> =
> idFirCurent dupa care la iesire fac idActiv = 0,
> s.a.m.d.
>
> - pt a obtine IdFirCurent folosesc pthread_self
S-ar putea sa ai dreptate, nu pot sa ma pronunt acum.
Ai insa grija sa nu ai race-uri intre operatii la
setarea proprietarului.
Totusi, daca este corect pierzi experienta utilizarii
TLS si tema ta s-ar putea clasa pe o pozitie medie sau
codasa :)
> 2. Se cere "sa fim atenti la utilizari gresite ale
> functiilor ". Este suficient ca functiile pt monitor
> sa
> returneaze o valoarea de eroare cand se intampla asa
> ceva ? Sau trebuie sa mai facem si altceva, de ex
> mesaj afisat la consola, aruncare de exceptii ... ?
Este suficient un cod de eroare.
> 3. Monitorul se poate distruge doar atunci cand nu
> exista fir activ in el si nu exista nici un fir care
> este blocat intr-o coada de asteptare sau la vreo
> variablia de conditie ?
Da, asta ar trebui sa faca destroy. Ar mai trebui sa
va scrieti o functie de distrugere fortata, _destroy,
pe care s-o apelati de exemplu la oprirea fortata a
programului (Ctrl+C) pentru ca altfel nu se pot
debloca firele care asteptau la conditii.
Cosmin
__________________________________
Do you Yahoo!?
Protect your identity with Yahoo! Mail AddressGuard
http://antispam.yahoo.com/whatsnewfree