Differences

This shows you the differences between two versions of the page.

Link to this comparison view

app:laboratoare:04 [2024/10/29 02:37]
alexandru.bala [Variabile condiție]
app:laboratoare:04 [2025/11/12 05:03] (current)
alexandru.bala [Variabile condiție]
Line 178: Line 178:
 void *f(void *arg) void *f(void *arg)
 { {
-    ​// facem lock pe mutex+        ​// facem lock pe mutex
  pthread_mutex_lock(&​mutex);​  pthread_mutex_lock(&​mutex);​
-    ​// zona critica+        ​// zona critica
  a += 2;  a += 2;
-    ​// facem unlock pe mutex+        ​// facem unlock pe mutex
  pthread_mutex_unlock(&​mutex);​  pthread_mutex_unlock(&​mutex);​
  
Line 194: Line 194:
  int arguments[NUM_THREADS];​  int arguments[NUM_THREADS];​
  
-    ​// cream mutexul+        ​// creăm mutex-ul
  pthread_mutex_init(&​mutex,​ NULL);  pthread_mutex_init(&​mutex,​ NULL);
  
Line 261: Line 261:
  for (i = 0; i < NUM_THREADS;​ i++) {  for (i = 0; i < NUM_THREADS;​ i++) {
  pthread_join(threads[i],​ &​status);​  pthread_join(threads[i],​ &​status);​
- }+ 
  pthread_barrier_destroy(&​barrier);​  pthread_barrier_destroy(&​barrier);​
 +
  return 0;  return 0;
 } }
Line 358: Line 360:
  
     pthread_mutex_init (&​mutex,​ NULL);     pthread_mutex_init (&​mutex,​ NULL);
- 
     sem_init (&​full_sem,​ 0, 0);     sem_init (&​full_sem,​ 0, 0);
     sem_init (&​empty_sem,​ 0, 3);     sem_init (&​empty_sem,​ 0, 3);
Line 376: Line 377:
     }     }
  
-    pthread_mutex_destroy(&​mutex);​+    ​sem_destroy (&​empty_sem);​ 
 +    sem_destroy (&​full_sem);​ 
 +    ​pthread_mutex_destroy (&​mutex);​
  
     return 0;     return 0;
Line 386: Line 389:
 Variabilele condiție reprezintă o structură de sincronizare,​ care au asociat un mutex, și ele au un sistem de notificare a thread-urilor,​ astfel încât un thread să fie blocat până când apare o notificare de la alt thread. Pentru a putea folosi variabile condiție în pthreads ne folosim de structura ''​pthread_cond_t''​. Variabilele condiție reprezintă o structură de sincronizare,​ care au asociat un mutex, și ele au un sistem de notificare a thread-urilor,​ astfel încât un thread să fie blocat până când apare o notificare de la alt thread. Pentru a putea folosi variabile condiție în pthreads ne folosim de structura ''​pthread_cond_t''​.
  
-Variabilele condiție sunt folosite pentru a bloca thread-ul curent (mutexul și semaforul blochează celelalte thread-uri). Acestea permit unui thread să se blocheze până când o condiție devine adevărată,​ moment când condiția este semnalată de thread că a devenit adevărată și thread-ul / thread-urile blocate de condiție își reiau activitatea. O variabilă condiție va avea mereu un mutex pentru a avea race condition, care apare când un thread 0 se pregătește să aștepte la variabila condiție și un thread 1 semnalează condiția înainte ca thread-ul 0 să se blocheze+Variabilele condiție sunt folosite pentru a bloca thread-ul curent (mutexul și semaforul blochează celelalte thread-uri). Acestea permit unui thread să se blocheze până când o condiție devine adevărată,​ moment când condiția este semnalată de thread că a devenit adevărată și thread-ul / thread-urile blocate de condiție își reiau activitatea. O variabilă condiție va avea mereu un mutex pentru a avea race condition, care apare când un thread 0 se pregătește să aștepte la variabila condiție și un thread 1 semnalează condiția înainte ca thread-ul 0 să se blocheze.
  
 Funcții: Funcții:
Line 478: Line 481:
  srand (time (NULL));  srand (time (NULL));
  for (i = 0; i < NUM_THREADS;​ i++) {  for (i = 0; i < NUM_THREADS;​ i++) {
- type = rand () % 2;+ type = i % 2;   // ar funcționa și rand () % 2 în loc de i % 2?
  if (type == CONSUMER) {  if (type == CONSUMER) {
  pthread_create (&​tid_v[i],​ NULL, consumer_func,​ NULL);  pthread_create (&​tid_v[i],​ NULL, consumer_func,​ NULL);
Line 490: Line 493:
  }  }
  
 +        pthread_cond_destroy (&​empty_cond,​ NULL);
 + pthread_cond_destroy (&​full_cond,​ NULL);
  pthread_mutex_destroy(&​mutex);​  pthread_mutex_destroy(&​mutex);​
  
app/laboratoare/04.1730162268.txt.gz · Last modified: 2024/10/29 02:37 by alexandru.bala
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0