Tehnici de implementare a concurentei în analiza si proiectarea ...
Tehnici de implementare a concurentei în analiza si proiectarea ...
Tehnici de implementare a concurentei în analiza si proiectarea ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Totu<strong>si</strong>, din punct <strong>de</strong> ve<strong>de</strong>re conceptual exista o modalitate <strong>de</strong> a rezolva aceasta<br />
problema. Astfel, daca limbajul <strong>de</strong> programare permite folo<strong>si</strong>rea semafoarelor doar<br />
pentru marcarea <strong>de</strong> sectiuni critice ce se refera la proprietati private, atunci codul <strong>de</strong><br />
coordonare a <strong>concurentei</strong> poate fi implementat cu respectarea principiului codului <strong>de</strong><br />
interactiune orientat pe activitatea apelata, dar evi<strong>de</strong>nt numai relativ la apelatorii care<br />
fac parte din celelalte clase din domeniul aplicatiei. Nici unul dintre limbajele <strong>de</strong><br />
programare orientate-obiect concurente cunoscute nu suporta <strong>în</strong>sa o astfel <strong>de</strong><br />
restrictie.<br />
Pe <strong>de</strong> alta parte semafoarele au o putere restrânsa <strong>de</strong> specificare a<br />
interactiunilor <strong>în</strong>tre fire <strong>de</strong> executie concurente. Astfel, <strong>de</strong>oarece initializarea<br />
variabilei unui semafor poate permite executia paralela a mai multor activitati <strong>în</strong><br />
interiorul unei sectiuni critice este po<strong>si</strong>bila <strong>implementare</strong>a <strong>concurentei</strong> intra-obiect.<br />
Semafoarele <strong>în</strong>sa nu ofera suport pentru coordonarea <strong>concurentei</strong> <strong>de</strong>pen<strong>de</strong>nta <strong>de</strong><br />
istoric. Mai mult, este dificila <strong>implementare</strong>a unei interactiuni conditionale <strong>în</strong>tre mai<br />
multe activitati <strong>de</strong>oarece conditia <strong>si</strong> evaluarea acesteia trebuie <strong>si</strong>mulata explicit prin<br />
intermediul operatiilor asupra variabilei semaforului. Prin urmare semafoarele nu<br />
ofera un suport real pentru executia <strong>de</strong>pen<strong>de</strong>nta <strong>de</strong> stare.<br />
De asemenea, semafoarele nu satisfac principiul izolarii codului <strong>de</strong><br />
interactiune. Exemplul care urmeaza, <strong>în</strong> care este implementata clasa Coada,<br />
ilustreaza foarte clar importanta acestui principiu. Bine<strong>în</strong>teles, nerespectarea <strong>de</strong> catre<br />
semafoare a principiului izolarii codului <strong>de</strong> interactiune atrage automat dupa <strong>si</strong>ne <strong>si</strong><br />
nerespectarea principiului separarii acestuia.<br />
class Coada{<br />
. . .<br />
//<strong>de</strong>clararea tuturor proprietatilor <strong>si</strong> a operatiilor este i<strong>de</strong>ntica<br />
//cu cea din exemplul <strong>de</strong> <strong>implementare</strong> secventiala<br />
. . .<br />
//<strong>de</strong>clararea <strong>de</strong> proprietati specifice <strong>si</strong>ncronizarii<br />
//cu semafoare<br />
private:<br />
semaphore pozGoale;<br />
semaphore pozPline;<br />
semaphore secCritica1;//pt. modificare elemIntroduse<br />
semaphore secCritica2;//pt. modificare elemExtrase<br />
}<br />
Implementarea cozii <strong>de</strong>clarate mai sus este realizata astfel <strong>în</strong>cât sa fie respectat<br />
principiul codului <strong>de</strong> interactiune orientat pe obiectul apelat <strong>în</strong> maniera amintita mai<br />
2 sectiune critica = fragment <strong>de</strong> cod <strong>în</strong> care se realizeaza anumite actiuni asupra unei proprietati<br />
partajate<br />
28