next up previous
Next: Semafoare Up: Sincronizare thread-uri Previous: Mutex-uri

Variabile conditie

Variabilele conditie sunt folosite numai impreuna cu un mutex asociat. In general un mecanism de monitor contine trei componente:

Sablonul de utilizare a unui monitor este:

/* unul din thread-uri */
inchide mutex-ul asociat
cat timp predicat = fals
     asteapta pe variabila conditie
lucreaza
elibereaza mutex-ul asociat


/* celalalt thread */
inchide mutex-ul asociat
pune predicatul pe true
semnaleaza pe variabila conditie
elibereaza mutex-ul

Functiile de lucru cu variabilele conditie sunt:

#include <pthread.h>

int    pthread_cond_init(pthread_cond_t    *cond,    pthread_condattr_t
                                           *cond_attr);
int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_broadcast(pthread_cond_t *cond);
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
int   pthread_cond_timedwait(pthread_cond_t   *cond,    pthread_mutex_t
      *mutex, const struct timespec *abstime);
int pthread_cond_destroy(pthread_cond_t *cond);

pthread_cond_init este folosit pentru initializarea variabilei conditie la setul de atribute; de obiecei pentru atribute se va specifica NULL pentru atributele implicite

pthread_cond_signal reporneste unul din thread-urile care asteapta la o variabila conditie; daca nu exista nici un thread care asteapta acolo, nu se intampla nimic; daca asteapta mai multe thread-uri, se va trezi unul singur

pthread_cond_broadcast reporneste toate thread-urile care asteapta la variabila conditie

pthread_cond_wait elibereaza mutex-ul asociat variabilei conditie si asteapta pe variabila conditie respectiva, pentru a fi semnalata

pthread_cond_destroy distruge variabila conditie, impreuna cu resursele pe care le contine



Razvan Adrian Deaconescu 2005-12-07