Please enable JavaScript.
Coggle requires JavaScript to display documents.
Sincronização - semáforos (Principais mecanismos de sincronização em…
Sincronização -
semáforos
Capítulos anteriores
regiões críticas
são uma estratégia para evitar condições de corrida
princípio da
exclusão mútua
é uma forma de manter consistência entre processos concorrentes
condições de corrida
podem ser problemáticas
Programa concorrente
é
correto
se ocorrer:
ausência de
deadlock
ausência de
starvation
exclusão mútua
nenhuma estipulação sobre a
velocidade de execução dos processos
Sincronização:
conceituação
Sincronizar
Tornar sincrônico, produzir
sincronismo
ou
simultaneidade
em.
Sincronismo
Qualidade ou caráter de dois ou mais fatos que
acontecem no mesmo espaço de tempo
Coordenação
do tempo desses eventos ou fenômenos
Sincronização em
programas concorrentes
Gerenciamento adequado de
múltiplos fluxos de execução
ou processos concorrentes
que acessam simultaneamente
um mesmo recurso limitado ou um conjunto de dados
compartilhado, mantendo
ordem e coerência
das ações
realizadas por tais fluxos
Principais mecanismos de sincronização
em programas concorrentes
Barreiras
Bloqueios explícitos
Monitores
Troca de mensagens
Semáforos e
mutexes
Semáforos:
modelo conceitual
Princípios básicos
Atomicidade
o travamento de um semáforo é uma operação atômica,
não podendo ser interrompida
Singularidade
se um semáforo está associado a um processo/
thread
,
nenhum outro será capaz de aloca-lo antes que
o primeiro libere o travamento
Notificar
o processo/
thread
quando
a região crítica puder ser executada (
signal
)
Espera não ocupada
se um processo/
thread
tenta travar um semáforo já travado,
ele ficará suspenso até que o semáforo seja liberado
Suspender
o processo/
thread
enquanto
ele não obtiver permissão para
executar sua região crítica (
wait
)
Semáforo
variável do tipo inteiro que funciona como um contador
indicando quando o recurso está sendo acessado
por um dos processos
incrementada
em uma unidade quando
um processo é acordado (
up / signal
)
e pode resultar no
desbloqueio
de
um processo/
thread
decrementada
em uma unidade quando
um processo é suspenso (
down / wait
)
e pode resultar no
bloqueio
de
um processo/
thread
Garantia de corretude
do programa
Exclusão mútua satisfeita
apenas um processo/
thread
executa a sua
região crítica por vez
Não há deadlock
o acesso ao recurso é coordenado, de modo que um
processo/
thread
só o acessa se ele estiver liberado
Não há starvation
se o semáforo tiver uma fila de processos/
threads
bloqueados, em algum momento um deles será posto para executar (o primeiro bloqueado)
Semáforos
Operação
down
para
acesso à região crítica
Operação
up
para
liberação da região crítica
O semáforo indica o
número de processos/
threads
em estado de espera
Podem ser usados para garantir
exclusão mútua
e para fins de
sincronização
Semáforos binários
(mutexes)
Possíveis valores:
0 e 1
Variável representando semáforo é inicializada com 1
é uma especialização de semáforo
com enfoque na
exclusão mútua
Limitações do uso
de semáforos
têm uma
maior propensão a erros
, podendo levar o programa a executar incorretamente
Condições de corrida,
deadlocks
,
starvations
,
comportamentos imprevisíveis
não implementam a exclusão mútua diretamente,
sendo apenas um
mecanismo que permite
a implementação da exclusão mútua
são considerados
primitivas de baixo nível