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.