Sunteți pe pagina 1din 2

Folosiţi directorul lin/ din arhiva de sarcini a laboratorului.

1. Intrați în directorul unsafe/.


o Inspectati continutul fisierului : unsafe.c .
o Analizati functiile increment si double_increment .
o Este necesara protejarea variabilei a daca functia increment este rulata de
mai multe thread-uri? Dar variabila b?
o Testati raspunsul dupa urmatorul scenariu:[ pentru increment ] creati
THREADS_NO thread-uri care sa ruleze functia increment si comparati
valoarea lui a cu valoarea pe care o asteptati pentru a. Pentru
double_increment procedati similar.
o Protejati variabilele , acolo unde este necesar , folosind un mutex.
o Hints
 Nu uitati sa apelati join pentru fiecare thread creat.
 Rulati programul vostru de mai multe ori.
2. Intrati in directorul increment/.
o Inspectati continutul fisierului: increment.c , executati make si rulati
executabilul obtinut.
o Programul increment.c creeaza doua fire de executie fiecare fir
incrementand variabila globala a. Aparitia unui semnal SIGSEGV va duce
la resetarea variabilei a.
o Ce problema poate sa apara in decursul rularii programului.?
o Observatie Exercitiul are insemnatate mai mult didactica .
o Hints
 Amintiti-va ce se intampla cu variabilele globale neinitializate.
3. Intrati in directorul h2o/.
o Inspectati continutul fisierului :h2o.c.
o In acest exercitiu vom crea apa. Va trebui sa punem impreuna doi atomi
de hidrogen si un atom de oxigen. Atomii sunt reprezentati de fire de
executie.Fiecare atom de hidrogen apeleaza functie hReady iar fiecare
atom de oxigen apeleaza functia oReady. Un atom de hidrogen nu se
combina ( thread-ul corespunzator lui nu se termina ) pana cand nu exista
un alt atom de hidrogen si un atom de oxigen. De asemenea un atom de
oxigen pentru a se combina are nevoie de doi atomi de hidrogen.
o Completati functiile hReady si oReady astfel incat sa obtineti apa.
 Hints
 Intr-o variabila globala putem tine numarul de atomi de
hidrogen .
 In functia hReady incrementam acest numar si ne folosim
de valoarea sa pentru a ne da seama daca trebuie sa mai
asteptam dupa inca un atom de hidrogen sau acesta deja
exista.In cazul in care avem 2 atomi de hidrogen ne mai
trebuie un atom de oxigen.
 In functia oReady asteptam 2 atomi de hidrogen dupa care
molecula de apa e gata. Ne mai ramane doar sa afisam un
mesaj si sa informam si threadurile hidrogen ca se pot
incheia.
 Folositi doua semafoare si aveti grija de variabila globala
care retine numarul de atomi de hidrogen.
4. Intrati in directorul prodcons/.
o Inspectati continutul fisierului :prodcons.c.
o In acest exercitiu vom rezolva problema producator-consumator folosind
variabile de conditie si mutecsi.Producatorul va produce un anumit numar
de intregi pe care ii va pune intr-un buffer de lungime limitata de unde
consumatorul ii va lua.
o Completati functiile consumer_fn si producer_fn corespunzatoare
producatorului respectiv consumatorului.
 Hints
 Folositi tipul buffer_t pentru a reprezenta buffer-ul.Campul
count reprezinta pozitia curenta de inserat in buffer.
 Folositi functiile init_buffer , insert_item, remove_item,
is_buffer_full si is_buffer_empty pentru a lucra cu buffer-
ul.

S-ar putea să vă placă și