Sistemas Operacionais

Comandos: pthread_mutex_lock, pthread_mutex_trylock e pthread_mutex_unlock


SINÓPSE

int pthread_mutex_lock (pthread_mutex_t *mutex)

int pthread_mutex_trylock (pthread_mutex_t *mutex)

int pthread_mutex_unlock (pthread_mutex_t *mutex)

DESCRIÇÃO

mutex deve ser uma variável  do tipo pthread_mutex_t que é um mutex (para indicar "mutual exclusion") e serve para proteger uma região crítica. Uma thread para proteger uma região crítica deve dar um pthread_mutex_lock para obter exclusão mútua e pthread_mutex_unlock para liberar a região crítica.

A chamada pthread_mutex_lock() é usada para tentar realizar um "lock" em um mutex. Caso o mutex se encontre "locked", a thread que fez a chamada fica bloqueada até que esse mutex se torne "unlocked" (disponível). Caso o mutex se encontre "unlocked", a chamada resulta na mudança do estado do mutex para "locked", sendo a thread chamadora sua dona. Se terminar de maneira correta, a função retorna 0 (zero). Ou um número indicando erro, caso contrário.

A chamada pthread_mutex_trylock() é identica a pthread_mutex_lock() exceto no caso do mutex se encontrar "locked". Neste caso, o retorno é imediato. Caso o mutex se encontre "unlocked", a chamada resulta na mudança do estado do mutex para "locked", sendo a thread chamadora sua dona. Se a chamada conseguir adquirir ("lock") o mutex, a função retorna 0 (zero). Ou um número indicando erro, caso contrário.

A chamada pthread_mutex_unlock() é usada para tentar disponibilizar ("unlock") um mutex. Se existirem threads bloqueadas aguardando o mutex ficar disponível, estas são desbloqueadas e o escalonador acaba por escolher a thread que realizará o próximo "lock". Se terminar de maneira correta, a função retorna 0 (zero). Ou um número indicando erro, caso contrário.

EXEMPLO

result = pthread_mutex_lock(&mymutex);

 O arquivo pthread.h deve ser o primeiro a ser incluído em cada programa.


DISPONÍVEL

AIX, Linux, Lynx, SunOS e Solaris


Para maiores informações sobre este comando, use o  comando man.



Outros comandos pthread_mutex_init() e pthread_mutex_destroy()