[so] Tema 3 TSD

tavi at cs.pub.ro tavi at cs.pub.ro
Thu Nov 30 21:59:54 EET 2006


> In enunt se spune
>
> "Pentru a testa utilizarea corecta a monitorului mentineti un index in
> Thread Specific Data care indica pentru fiecare fir de executie daca se
> afla sau nu in interiorul monitorului.... Indexul TSD este initializat
> implicit la NULL deci va trebui sa folositi functia de intializare a
> bibliotecii pentru initializarea lui cu o valoare utila."
>

In primul rand, nu e obligatoriu sa folositi TSD. E doar un mecanism de
debug pe care il puteti folositi.

> Din ce inteleg eu, ideea e ca fiecare thread tine minte in acel void*
> din TSD daca e sau nu in monitor. Si cum NULL adica 0 nu-i bun trebuie
> sa punem de exemplu 1 si 2 pentru se afla / nu se afla in monitor.
> Intrebarea e cum accesam fiecare thread in functia de intializare a
> bibliotecii pentru a seta valoare initiala 2 in TSD? Eu am inteles ca
> functia de initializare a bibliotecii se cheama automat o singura data
> inainte de intrarea in main a threadului unic initial al procesului care
> se executa si foloseste biblioteca (deci cu mult inainte ca acest proces
> sa creeze alte threaduri care sa aiba TSD) ? Am si facut un mic program
> de test care imi confirma ca e asa.
>

Ai dreptate. Ceea ce doreste sa se spuna in enunt, este ca pentru a folosi
o cheie trebuie sa o creati intai (e.g. pthread_key_create()).


> Oarecum paralel cu intrebarea dinainte de ce sa folosim acest mod de
> lucru pentru a sti cine e in monitor si cine nu? De exemplu de ce sa nu
> tina monitorul o lista cu toate threadurile care sunt in el?
>

Era doar o sugestie :)

> Mutumesc (scuze ca pun cam multe intrebari in ultimul timp dar la
> raspunsurile la cele dinainte chiar m-au ajutat si nu inteleg deloc ce
> se vrea cu acest mod de folosire al TSD)
>

Nu e nici o problema, asta e rolul listei :)

tavi




More information about the so mailing list