Please enable JavaScript.
Coggle requires JavaScript to display documents.
Sincronismo de Processos e Threads - Coggle Diagram
Sincronismo de Processos e Threads
Soluções para o problema da SC
Soluções de software com bloqueio
Sleep/wakeup
Bloqueio dos processos enquanto não é permitida a entrada na SC
Evita desperdicio de CPU como em busy wait
Problema do produtor/consumidor
Um processo do consumidor pode ser interrompido entre a verificação e o comando sleep()
O buffer enche e o produtor também adormece
Ambos esperam um ao outro para acordarem
Par sleep() / wakeup()
Semáforo
Pares
aquire (), wait(), P(), down()
Decrementa S
Se S != 0, coloca o processo na fila
release(), signal(), V(), up()
Incrementa S
Se S <= 0, tira o próximo da fila
Menos complicado
Operações atômicas
Funcionamento
Estrutura com valor inteiro (S) e lista
S = número de processos que podem ser executados simultaneamente
Se S = 1, mutual exclusion (mutex)
Se mutex, normalmente é para SC
Se S = 0, o semáforo é bloqueado
Deadlock
Dois processos esperam um pelo outro
Starvation
Um processo pode nunca sair da fila
Monitor
Garante a existência do par sempre
Menos versatilidade
Evita erros de implementação
Problemas clássicos de sincronismo
Filósofos glutões
5 filósofos, 5 hachis e arroz infinito
Cada filósofo precisa de 2 hachis para comer
Há o caso de cada um ter um hachi e ninguém comer
Possível solução
Se um filósofo tenta pegar o segundo hachi e não consegue, devolve o primeiro
Após comer, entrega o hachi para o filósofo do lado caso este esteja com fome
Leitores e escritores
Leitores
Vários leitores podem ler ao mesmo tempo
Escritores
Só um escreve por vez
Leitores não podem ler enquanto o escritor escreve
Passível de starvation
Leitores podem não liberar os dados
Escritores não acessam
Solução
Maior prioridade dos escritores