[so] vesti bune
Cosmin Arad
so@atlantis.cs.pub.ro
Sat, 22 Nov 2003 01:47:38 -0800 (PST)
Salut,
Iata o mica nelamurire care s-a ivit in legatura cu
tema 3. Dupa cum deja probabil ca v-ati dat seama nu
este necesar sa implementati in monitor cozi explicite
si va puteti folosi de variabile conditie.
Aceasta fiind situatia una dintre cerintele temei este
depistarea situatiilor de folosire incorecta a
monitorului (operatiile signal, broadcast si wait pot
fi apelate doar de threaduri intrate deja in monitor).
De aici se naste intrebarea: cum putem sa ne dam seama
ca un thread apeleaza signal sau wait inainte de a
face enter. Neavand in monitor liste cu toate
threadurile intrate o solutie ar fi ca fiecare thread
sa-si tina un flag care sa indice daca threadul este
sau nu in monitor, flag care sa fie testat in fiecare
operatie.
Deoarece programatorul care foloseste biblioteca
monitor trebuie sa nu fie constient de flagul
respectiv acesta va trebui implementat in biblioteca.
Dar cum bliblioteca este partajata si ea se incarca in
spatiul de adrese al procesului, un simplu flag global
in librarie ar fi comun tuturor threadurilor care
incarca libraria.
Pentru acest motiv va trebui sa folositi thread local
storage astfel incat flagul sa fie privat in fiecare
thread. Vestile bune erau ca aveti ocazia sa invatati
sa folositi thread local storage :).
Pentru a initializa TLS veti folosi entry-pointul in
librarie. Pe Windows faceti un TlsAlloc/TlsFree in
DllMain, iar pe Linux faceti un pthread_key_create in
constructorul/destructorul librariei declarat astfel:
void __attribute__ ((constructor)) my_init(void);
void __attribute__ ((destructor)) my_fini(void);
Pentru detalii vezi urmatoarele linkuri in Platform
SDK pt Windows:
ms-help://MS.PSDK.1033/dllproc/base/thread_local_storage.htm
ms-help://MS.PSDK.1033/dllproc/base/using_thread_local_storage.htm
ms-help://MS.PSDK.1033/dllproc/base/using_thread_local_storage_in_a_dynamic_link_library.htm
Pentru Linux vezi man pthread_key_create si din
Program Library HOWTO:
http://www.tldp.org/HOWTO/Program-Library-HOWTO/miscellaneous.html#INIT-AND-CLEANUP
Am pus linkurile de mai sus si in sectiunea Observatii
a temei. Nu este cazul sa va impacientati. Nu este
nimic complicat, doar nou. O sa va ia vreo ora sa
cititi indicatiile din linkurile de mai sus dar nu
este mare filosofie.
Succes,
Cosmin
__________________________________
Do you Yahoo!?
Protect your identity with Yahoo! Mail AddressGuard
http://antispam.yahoo.com/whatsnewfree