18.04.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!