Inserirprocurarpalavras

5628 palavras 23 páginas
Sincronização

Tipos 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

Relacionados