home 
news 
thread sync 
sync problems 
project intro 
assignment 1 
assignment 2 
assignment 3 
resources 
examples 
rules 
submit howto 
   
 

Exemple de probleme de sincronizare "clasice"

Exemplul 1: Producatori/Consumatori

Intr-un program exista un numar de N fire de executie producator si M fire de executie consumator.

Firele producator genereaza elemente, de exemplu litere sau numere. Aceste elemente sint inserate intr-un buffer de dimensiune SIZE elemente, pe pozitiile libere. Daca buffer-ul e plin, procesele producator se blocheaza asteptind locuri goale pentru elemente.

Firele consumator iau elemente din buffer, de pe pozitiile ocupate, eliberindu-le. Daca nu exista elemente in buffer, firele se blocheaza asteptind elemente generate.

Exemplul 2: Barbierul somnoros

Se considera o frizerie deservita de un barbier. Acesta dispune de cinci scaune in holul de asteptare. Barbierul nu poate deservi decat un client la un moment dat, iar in criza de clienti barbierul atipeste. Un client in functie de situatia existenta in frizerie in momentul sosirii poate actiona intr-unul din modurile urmatoare:
  • daca barbierul doarme, il trezeste si cere sa fie barbierit;
  • daca barbierul este ocupat, dar exista scaune libere in holul de asteptare ocupa un scaun asteptand sa-i vina randul;
  • daca holul de asteptare este plin atunci clientul pleaca (nemultumit!).
Sa se scrie un program care sincronizeaza firele asa cum se cere mai sus, si care afiseaza o statistica a clientilor deserviti si a celor nemultumiti.

Exemplul 3: Fum de tigarete

Se considera un sistem care consta din 3 fire de executie smoker si un fir de executie agent. Fiecare smoker isi pregateste o tigareta si o fumeaza. Pentru a face o tigareta sunt necesare trei ingrediente: tutun, hartie, si chibrite. Unul din fire are numai hartie, celalt are numai tutun si al treilea numai chibrite. Firul agent are o rezerva infinita din toate cele trei ingrediente si pune cate doua din ingrediente pe o masa. Firul smoker care are celalalt ingredient poate atunci sa-si confectioneze si sa fumeze o tigareta semnaland agentului cand a terminat, atunci agentul pune alte doua ingrediente pe masa si ciclul se repeta.