[so] vesti bune

Cosmin Arad so@atlantis.cs.pub.ro
Sun, 23 Nov 2003 16:20:34 -0800 (PST)


--- Andrei Hagiescu <andrei.hagiescu@mymail.ro> wrote:
> Datorita posibilitatii folosirii mai multor
> monitoare un thread poate fi la
> un moment dat intr-unul dintre ele si in afara
> altuia....sau de ce nu in mai
> multe monitoare? Daca da, atunci informatia stocata
> in TLS (cu privire la
> starea unui thread inauntrul sau in afara unui
> monitor) trebuie sa nu mai
> fie o simpla informatie booleana ci o lista de
> monitoare in care thread-ul
> este intrat, nu? Nu devine o solutie mai greu de
> implementat decat o lista
> de thread-uri intrate pentru fiecare monitor?

Oops. You've got that right.
Solutia ramane totusi simpla. In loc sa faceti
TlsAlloc respectiv pthread_key_create in entry-pointul
librariei (DllMain respectiv constructorul librariei
pe Linux) veti face in functia create.
Astfel fiecare monitor contine un index distinct in
TLS
iar verificarile de utilizare corecta care se fac in
operatii se vor face folosind indexul respectiv.
Asadar informatia ramane booleana :) si implementarea
nu presupune overhead.

Limitele sunt rezonabile: 1088 de indexuri in Windows
2000 si 1024 in Linux, deci un proces poate sa
construiasca cam 1000 de monitoare.

Cosmin


__________________________________
Do you Yahoo!?
Protect your identity with Yahoo! Mail AddressGuard
http://antispam.yahoo.com/whatsnewfree