Variabilele conditie sunt folosite numai impreuna cu un mutex asociat. In general un mecanism de monitor contine trei componente:
/* 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