[so] vesti bune

Andrei Hagiescu so@atlantis.cs.pub.ro
Mon, 24 Nov 2003 01:57:00 +0200


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?

----- Original Message -----
From: "Cosmin Arad" <cosminarad@yahoo.com>
To: <so@atlantis.cs.pub.ro>
Sent: Saturday, 22 November, 2003 11:47 AM
Subject: [so] vesti bune


>
> 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 :).
>