[so] tema 3

Cosmin Arad so@atlantis.cs.pub.ro
Sun, 23 Nov 2003 09:41:38 -0800 (PST)


--- Cibu Cristian <cibu.cristian@rdslink.ro> wrote:
> libraria noastra cuprinde functii pentru monitoare.
> ok. dar pentru un singur monitor sau pot sa fie
> oricate?

oricate.

> adica: exista un grup de procese care reprezinta o
> aplicatie. acestea folosesc un monitor. nu pot

monitorul se va folosi de catre un grup de threaduri
ale unui proces. nu de catre procese diferite.
Memoria alocata pt monitor la create se aloca in
spatiul de adrese al procesului apelant.

> exista si alte grupuri de procese care sa aiba
> nevoie de mecanismul de monitor sau o aceiasi
> aplicatie sa aiba nevoie de mai multe monitoare?
> presupun ca da, si libraria noastra sa le poata
> deservii pe toate. altfel nu vad ce rol are
> parametrul Monitor * in toate functiile cerute.

un proces poate crea mai multe monitoare care sa fie
folosite de firele sale de executie. Mai multe procese
pot incarca libraria si crea mai multe monitoare.

> apoi, de ce este nevoie de un Monitor *? ce nevoie
> are o aplicatie sa stie exact ce e acela un monitor?
> stie de concept, stie ce functii pune la dispozitie
> libraria si ii este de ajuns. ce vreau eu sa zic
> este, nu putem inlocui acel Monitor* cu un int? un
> fel de monitor descriptor (analogie cu file
> descriptor).

Monitor * e un pointer de care aplicatia nu trebuie sa
stie nimic. exact ca un handle din windows. Nu poti cu
int pt ca in cazul asta biblioteca ar trebui sa tina
un array de monitoare indexat dupa int-ul tau, si cum
nu are de unde sa stie cate monitoare vor fi create e
o complicatie inutila.

> apoi, un proces creaza monitorul. ok, are un handle
> la el (int sau Monitor *, nu conteaza) si face
> treaba cu el.
> celelalte procese cum procedeaza? pentru ca nu vad
> alta functie asemanatoare cu create sau init ar
> trebui sa creeze el din nou monitorul respectiv
> (adica din ou create). am putea face o chestie
> asemanatoare cu MONITOR_CREATE | MONITOR_EXCLUSIVE
> la creare care sa returneze eroare daca exista deja
> monitorul care voria sa fie creat.

Un monitor se va partaja intre firele de executie ale
unui proces, nu intre procese. Nu este necesar deci un
apel de genul Open. 
Procesul va crea monitorul inainte de crearea firelor
care il folosesc, acestea avand astfel acces la
monitor.

> si asa ajung la o alta chestiune. ar trebui ca la
> crearea monitorului sa se furnizeze si un
> identificator, o semnatura a aplicatiei, etc. o
> chestie prin care sa se identifica monitorul in
> afara librariei. adica e nevoie de un parametru
> extern pentru ca mecanismul CreateMonitor open
> Monitor sa functioneze (analogie cu orice alta
> pereche Create / Open din windows). 
> si ca sa fim consecventi ideii din windows, destroy
> nu ar sterge pur si simplu monitorul ci doar ar
> marca renuntarea unui proces la serviciile lui. cand
> monitorul nu mai este folosit de nimeni (folosit nu
> inseamna toate cozile din el goale) s-ar sterge
> efectiv monitorul.

am vazut deja ca cele de mai sus nu sunt necesare

> sper ca m-am exprimat destul de clar ca sa se poate
> intelege ce am vrut sa spun. 
> 
> deci, ce intreb eu:
> 
> 1. librarie monitor = un obiect monitor sau mai
> multe obiecte monitor

mai multe obiecte monitor.

> 2. se poate inlocui Monitor* cu int

nu

> 3. se poate adapta create la CreateMonitor si
> OpenMonitor si deci adaugarea unui parametru in plus

nu are sens.

Cosmin


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