next up previous
Next: Variabile conditie Up: Sincronizare thread-uri Previous: Sincronizare thread-uri

Mutex-uri

Un mutex este un mecanism de excludere mutual (MUTual EXclusion) utilizat pentru protectia structurilor de date partajate de la modificari concurente. Un mutex poate avea doua stari: locked sau unlocked. Daca un thread incearca sa inchida un mutex care a fost deja inchis de un alt thread atunci se va suspenda executia pana la eliberarea thread-ului.

Functiile de lucru cu mutex-uri sunt:

#include <pthread.h>

int  pthread_mutex_init(pthread_mutex_t  *mutex,  const  pthread_mutex-
                                         attr_t *mutexattr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
int pthread_mutex_destroy(pthread_mutex_t *mutex);

pthread_mutex_init este folosita pentru initializarea unui mutex conform cu atributele specificate; in locul atributelor se va folosi NULL pentru atributele implicite

pthread_mutex_lock este folosit pentru a inchide mutex-ul respectiv; daca mutex-ul nu este inchis, atunci thread-ul curent devine detinatorul mutex-ului si il inchide; altfel se suspenda executia thread-ului curent pana la eliberarea mutex-ului

pthread_mutex_trylock se comporta la fel ca pthread_mutex_lock doar ca nu blocheaza thread-ul curent; daca mutex-ul este deja inchis de un alt thread se intoarce cu un cod de eroare EBUSY

pthread_mutex_unlock deblocheaza mutex-ul curent; se asteapta ca mutex-ul sa fie ocupat in momentul eliberarii

pthread_mutex_destroy distruge obiectul mutex, eliberand resursele pe care acesta le-ar putea detine

De sine statoare, mutex-urile pot fi folosite numai pentru asigurarea excluderii mutuale; pentru probleme asemanatoare acestea sunt insuficiente. De accea se vor folosi impreuna cu variabilele conditie, pentru a crea mecanismul de monitor, structura extrem de utila si de flexibila pentru rezolvarea problemelor de sincronizare.


next up previous
Next: Variabile conditie Up: Sincronizare thread-uri Previous: Sincronizare thread-uri
Razvan Adrian Deaconescu 2005-12-07