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 ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
. . .<br />
//<strong>de</strong>clararea <strong>de</strong> proprietati specifice <strong>si</strong>ncronizarii<br />
//prin asteptare conditionala<br />
private:<br />
//conditia ce este respectata cand coada nu e goala<br />
condition nuGol is not (elemIntroduse-elemExtrase==0);<br />
//conditia ce este respectata cand coada e nu plina<br />
condition nuPlin is not (elemIntroduse-elemExtrase==maxElem);<br />
}<br />
void Coada::Adauga(Element elem){<br />
wait(nuPlin);<br />
elemIntroduse++;<br />
listaElemente[elemIntroduse % maxElem - 1]=elem<br />
}<br />
Element Coada::Extrage(){<br />
wait(nuGol);<br />
elemExtrase++;<br />
Element elemTmp=listaElemente[elemExtrase % maxElem - 1];<br />
return elemTmp;<br />
}<br />
În cadrul acestei implementari am tinut cont <strong>de</strong> faptul ca mecanismul <strong>de</strong><br />
monitor este bazat pe principiul "o <strong>si</strong>ngura activitate executata la un moment <strong>de</strong> timp<br />
dat". În cazul <strong>în</strong> care se doreste mo<strong>de</strong>larea unui paralelism intra-obiect este necesara<br />
inclu<strong>de</strong>rea variabilelor care compun <strong>în</strong> sectiuni critice, <strong>în</strong> caz contrar<br />
valoarea <strong>de</strong> a<strong>de</strong>var rezultata <strong>în</strong> urma evaluarii conditiei din nemaifiind<br />
certa. Introducerea unor astfel <strong>de</strong> sectiuni critice conduce la aparitia unor <strong>de</strong>zavantaje<br />
asemanatoare cu cele care au fost semnalate la semafoare <strong>si</strong> variabile <strong>de</strong> conditie.<br />
Principiul codului <strong>de</strong> interactiune orientat pe obiectul apelat este respectat <strong>de</strong><br />
acest mecanism doar <strong>în</strong> cazul evi<strong>de</strong>nt <strong>în</strong> care i<strong>de</strong>ntificatorii ce reprezinta conditiile<br />
împreuna cu toate variabilele care compun conditiile respective sunt proprietati<br />
private ale obiectului.<br />
Nu poate fi mo<strong>de</strong>lata interactiunea concurenta <strong>de</strong>pen<strong>de</strong>nta <strong>de</strong> istoric. De<br />
asemenea prezenta codului ce <strong>de</strong>scrie interactiunea concurenta <strong>în</strong> cadrul codului care<br />
<strong>de</strong>scrie functionalitatea operatiei <strong>de</strong>termina nerespectarea principiilor izolarii <strong>si</strong><br />
separarii codului <strong>de</strong> <strong>si</strong>ncronizare.<br />
b) Mecanisme <strong>de</strong> interactiune concurenta cu control mixt<br />
Coada <strong>de</strong> asteptare. Anumite limbaje <strong>de</strong> programare orientate-obiect<br />
concurente permit programatorilor sa <strong>de</strong>fineasca instante ale unei clase mai speciale,<br />
numita Coada_<strong>de</strong>_asteptare. Aceste instante pot fi atasate operatiilor unei clase <strong>si</strong> ele<br />
au ca efect scoaterea, respectiv introducerea dinamica a operatiilor respective <strong>în</strong><br />
36