[so][tema 3]Completare enunt

Marius Nicolae mariusn007 at gmail.com
Tue Dec 18 11:13:29 EET 2007


Salut,

Se poate sa gresesc, pentru ca pana la urma nu am inteles ce inseamna
ca monitorul "nu este liber".

Din pdf-uri am inteles ca numai un singur thread poate rula o metoda a
monitorului la un moment dat. Adica daca intr-un thread s-a inceput
rularea metodei Signal, nici un alt thread nu mai poate rula un
Wait,Signal,Enter,Leave pana nu se termina metoda Signal in primul
thread.

Din enunt se intelege ca monitorul este liber abia atunci cand un
thread il cedeaza si planifica pe altcineva. Deci daca faci cum scrie
in documentatie o sa iasa o mare varza.

Problema de care vorbeam in mailul anterior se refera la urmatorul scenariu:
La Readers/Writers, un reader intra in monitor, eventual asteapta un
OK_TO_READ, apoi iese din monitor si apoi incepe sa citeasca. Dupa ce
termina de citit intra din nou in monitor, semnaleaza OK_TO_READ si
face Leave.

Mi se pare cam ciudat sa nu poata intra in monitor, sa citeasca si
apoi sa iasa. Trebuie sa faca:
enter
wait
leave
read
enter
signal
leave

in loc de varianta mai intuitiva
enter
wait
read
signal
leave
ar fi posibila numai daca enterul ar planifica pe altcineva atunci
cand el se blocheaza, altfet e nevoie ca un alt thread sa faca leave
pentru a il trezi din enter (sper ca nu e prea vag ceea ce spun).

Ideea e ca in documentatie nu se vorbeste nicaieri de o operatie
enter, numai de wait, signal si return deci confuzia mea e cauzata de
neconcordanta dintre enunt si documentatie.

Eu am facut cum zice in enunt, cu toate ca e nevoie de un cod mai
ciudat la readers/writers, dar nu as fi putut face ca in documentatie
atata timp cat mi se cere o operatie Enter. Deci pana la urma problema
semnalata in mailul anterior era doar o confuzie.

Numai bine,
Marius Nicolae


More information about the so mailing list