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