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()