Interface: Mutex Arquivos: lib/mutex.h Última atualização: 22/12/2001 Autor: Luiz Henrique Shigunov |
Descrição Estruturas |
Funções | |
|
|
Esta página descreve a interface do usuário Mutex.
A idéia de ter uma interface Mutex é para possibilitar diferentes implementações desta interface. Uma implementação pode fazer um mutex extremamente rápido, mas sem nenhum tipo de controle de erro; outra pode implementar um mutex recursivo, etc.
Se tivessemos uma interface Sync com todos os tipos de sincronizadores, cada implementação teria que implementar todos os sincronizadores da interface.
Um mutex é um sincronizador do tipo exclusão mútua e é util para proteger dados compartilhados de modificações concorrentes. Serve também para implementar seções críticas e monitores.
Um mutex tem dois possíveis estados: livre (não possuido por uma linha de execução) e fechado (possuido por uma linha de execução). Um mutex não pode ser possuido por duas linhas de execução ao mesmo tempo. Uma linha de execução que tentar obter um mutex já possuido por outra linha de execução é suspença até o mutex ser liberado.
data são dados específicos e devem ser iniciados com Init.
int Destroy(Mutex *m);
Esta função destrói o mutex m, liberando os seus recursos.
O mutex não pode estar em uso.
typedef struct {
unsigned int data[4];
} Mutex;
0x00 - Destroy
Sintaxe
Descrição
Valor de retorno
int Init(Mutex *m, int prop);
Esta função inicia o mutex m com as propriedades prop.
prop ainda não é usado.
int Lock(Mutex *m);
Esta função obtém o mutex m.
Se o mutex estiver livre ele é obtido. Se já foi obtido por outra linha de execução a linha de execução que chamou Lock é bloqueada até o mutex ser liberado.
Se foi obtido pela mesma linha de execução, o comportamento depende da implementação.
int TryLock(Mutex *m);
Esta função tenta obter o mutex m.
Ela se comporta da mesma maneira que Lock, mas retorna erro se a linha de execução for bloquear.
int Unlock(Mutex *m);
Esta função libera o mutex m.