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.

urmare rutina <strong>de</strong> vitalizare trebuie folo<strong>si</strong>ta strict pentru conditionarea tratarii unor<br />

mesaje <strong>si</strong> pentru lansarea <strong>în</strong> executie paralela a operatiilor corespunzatoare mesajelor.<br />

În plus, la fel ca <strong>si</strong> <strong>în</strong> cazul expre<strong>si</strong>ilor <strong>de</strong> cale, rutina <strong>de</strong> vitalizare nu poate fi<br />

refolo<strong>si</strong>ta <strong>în</strong> clasele fiu: ea este sau mostenita integral sau rescrisa integral. Prin<br />

urmare nu este respectat nici principiul separariu codului <strong>de</strong> interactiune. Exista<br />

limbaje <strong>de</strong> programare (<strong>de</strong> exemplu Eiffel// [CAR90], [CAR93]) <strong>în</strong> care au fost<br />

implementate asa-numitele rutine <strong>de</strong> vitalizare generalizate un<strong>de</strong> este necesare<br />

initializarea unei tabele cu doua câmpuri: un câmp ce reprezinta o operatie a clasei iar<br />

cel <strong>de</strong>-al doilea o conditie <strong>de</strong> apelare a acesteia. Prin urmare programatorul nu va<br />

introduce cod efectiv <strong>în</strong> interiorul rutinei <strong>de</strong> vitalizare ci va initializa o astfel <strong>de</strong><br />

tabela. O astfel <strong>de</strong> abordare rezolva problema mostenirii rutinei <strong>de</strong> vitalizare <strong>si</strong>, <strong>în</strong><br />

plus, a<strong>si</strong>gura <strong>si</strong> izolarea codului <strong>de</strong> interactiune nemaifiind necesara respectarea unei<br />

discipline particulare <strong>de</strong> programare. Conditia necesara <strong>si</strong> suficienta pentru<br />

suportarea unei rutine generalizate <strong>de</strong> vitalizare <strong>de</strong> catre un limbaj <strong>de</strong> programare este<br />

aceea ca operatiile sa fie entitati <strong>de</strong> prima clasa ale limbajului.<br />

Operatii (ne)serializate. Anumite limbaje <strong>de</strong> programare orientate-obiect<br />

concurente (cum ar fi Java, Acore, ASK, etc. [PHI95]) folosesc un mod <strong>de</strong> etichetare<br />

a operatiilor unei clase ca neserializate. Aceste operatii pot fi executate <strong>în</strong> paralel cu<br />

oricare alta operatie a clasei. Practic operatiile neserializate sunt observatori (nu<br />

afecteaza starea obiectului pe parcursul executiei lor).<br />

Etichetarea operatiilor <strong>în</strong> maniera <strong>de</strong>scrisa poate stabili operatiile care pot fi<br />

executate <strong>în</strong> paralel. Mo<strong>de</strong>larea exclu<strong>de</strong>rilor mutuale <strong>în</strong>tre astfel <strong>de</strong> operatii poate fi<br />

realizata doar prin intermediul unui mecanism suplimentar <strong>de</strong> coordonare a<br />

<strong>concurentei</strong>.<br />

Din punct <strong>de</strong> ve<strong>de</strong>re al respectarii principiilor enuntate la <strong>în</strong>ceputul acestei<br />

sectiuni mecanismul operatiilor (ne)serializate se comporta foarte bine. Principala<br />

problema consta <strong>în</strong> capacitatea redusa <strong>de</strong> coordonare a interactiunilor concurente.<br />

Un mecanism particular bazat pe operatii (ne)serializate este mecanismul<br />

cititor/scriitor. Acest mecanism permite etichetarea operatiilor ca "cititori" (numite,<br />

asa cum am vazut, <strong>si</strong> observatori) <strong>si</strong> "scriitori" (cunoscute <strong>si</strong> sub <strong>de</strong>numirea <strong>de</strong><br />

modificatori). Operatiile cititor au rolul <strong>de</strong> a inspecta valorile proprietatilor obiectelor<br />

<strong>si</strong> <strong>de</strong> a returna o valoare corespunzatoare, iar operatiile scriitor modifica valorile<br />

51

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

Saved successfully!

Ooh no, something went wrong!