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

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

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

Saved successfully!

Ooh no, something went wrong!