Inserirprocurarpalavras
5628 palavras
23 páginas
SincronizaçãoTipos de Sincronização
Competição de vários processos por um recurso
Exclusão mútua
Cooperação entre processos
Produtores-consumidores
Leitores-escritores
Jantar de filósofos
Exclusão mútua
Problema da Exclusão
Mútua
int levantar_dinheiro (ref *conta, int valor)
{
if (conta->saldo >= valor) { conta->saldo = conta->saldo – valor;
} else valor = -1 return valor;
}
Problema da Exclusão
Mútua (à lupa)
As instruções C correspondem normalmente a várias instruções máquina int levantar_dinheiro (ref *conta, int valor)
{
if (conta->saldo >= valor) {
/* conta->saldo = conta->saldo – valor; */ mov R1, conta->saldo mov R2, valor sub R1, R2 mov conta->saldo, R1
} else valor = -1 return valor;
}
Problema da Exclusão
Mútua (à lupa)
P1
Saldo inicial = 100
Valor = 50
int levantar_dinheiro (ref *conta, int valor)
{
if (conta->saldo >= valor) { mov R1, conta->saldo mov R2, valor
Interrupção provoca comutação de processos sub R1, R2 mov conta->saldo, R1
} valor = -1; return valor;
P2
int levantar_dinheiro (ref *conta, int valor)
{
if (conta->saldo >= valor) { mov R1, conta->saldo mov R2, valor sub R1, R2 mov conta->saldo, R1
} else valor = -1; return valor;
}
SO volta a escalonar P1
}
Saldo inicial = 100
2 levantamentos de 50
Saldo final = 50!!
Secção crítica
(intuitivamente)
Secção Crítica: não pode ser interrompida int levantar_dinheiro (ref *conta, int valor)
{
if (conta->saldo >= valor) {
/* conta->saldo = conta->saldo – valor; */ mov R1, conta->saldo mov R2, valor sub R1, R2 mov conta->saldo, R3
} else valor = -1 return valor;
}
Secção Crítica
Propriedade de exclusão mútua: as instruções de uma região crítica de dois ou mais processos não podem ser intercaladas em nenhuma execução.
Formato dos programas loop secção não crítica fechar() // pré-protocolo secção crítica abrir() // pós-protocolo end Propriedades
Um processo