: TEC.0009
: 07h00-08h30 Lab 06
: 08h30-10h00 Lab 06
controle da concorrência : implica em suspender algumas tarefas enquantro outras acessam os recursos compartilhados de forma a garantir a consistência das tarefas e dos recursos.
impasse ou deadlock é quando as tarefas envolvidas ficam bloqueadas aguardando liberação de recursos indefinidamente.
exemplo transferência entre conta bancária
typedef struct conta_t {
int saldo; // saldo atual da conta
sem_t lock ; // semáforo associado à conta
... // outras informações da conta
};
void transferir (conta_t* contaDeb, conta_t* contaCred, int valor) {
sem_down (contaDeb->lock) ; // obtém acesso a contaDeb
sem_down (contaCred->lock) ; // obtém acesso a contCred
if (contaDeb->saldo >= valor) {
contaDeb->saldo -= valor ; // debita valor de contaDeb
contaCred->saldo += valor ; // credita valor em contaCred
}
sem_up (contaDeb->lock) ; // libera acesso a contaDeb
sem_up (contaCred->lock) ; // libera acesso a contaCred
}
Formalmente um conjunto de N tarefas se encontram em um impasse se cada uma das tarefas aguarda um evento que somente outra tarefa do conjunto poderá produzir.
4 condições são necessárias:
observações:
Grafos de alocação de recursos é uma forma de representa a alocação de recursos entre as tarefas.
Tipos de técnicas de tratamento: