[so][tema 3]Completare enunt

Stefan Bucur stefan.bucur at gmail.com
Mon Dec 17 23:53:26 EET 2007


On Dec 17, 2007 11:06 AM, Marius Nicolae <mariusn007 at gmail.com> wrote:
> Salut,
>
> La tema 3, nu se spune explicit in enunt, ca atunci cand se face
> enter, in cazul in care un thread se blocheaza in coada entry, el
> trebuie mai intai sa planifice pe altcineva pentru executie. La Wait,
> la Leave si la Signal (pentru Signal_And_Wait) se spune treaba asta,
> dar la enter nu, desi din documentatia pdf asta am inteles (am inteles
> the hard way, pentru ca monitorul avea un comportament total
> neintuitiv si nesimetric, asa ca m-am apucat sa citesc mai cu atentie
> pdf-urile alea).
>
> Am trimis mailul asta pentru a-i scuti pe cei de anul viitor de ceva
> dureri de cap.
>

Functia Enter are o proprietate particulara: executia ei nu depinde
sub nici o forma de controlul monitorului; oricine poate da oricand
Enter pe monitor, indiferent de configuratia de executie a
thread-urilor care sunt deja implicate in monitor (se executa sau se
afla intr-o coada). La toate celelalte functii (Wait, Leave, Signal,
Broadcast) exista o regula de executie: un singur thread detine
monitorul la un moment dat, apoi programeaza un singur alt thread in
locul lui, lucru care nu e cazul la functia Enter.

Astfel, nu are sens problema planificarii altui thread spre executie
atunci cand are loc Enter, tocmai pentru ca fie poti intra tu direct
in executie, fie deja e altcineva in locul tau care se executa.
Functia Enter e "asincrona" in raport cu celelalte functii, si nu
poate participa la planificare pana nu detine monitorul (adica pana nu
se "sincronizeaza" cu celelalte thread-uri in raport cu monitorul).

Stefan Bucur


More information about the so mailing list