Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 2
Sincronização e Coordenação; Problemas de
Produtor-Consumidor
Sincronização de Threads
●
●
Comunicação entre Threads
condição de corrida
mesmos dados mesmo tempo
Exemplo com uma Stack
Thread A Thread B
Secção crítica
Synchronized
Sincronização
suspender
Cadeados
Lock Unlock
Mutex: Exclusão Mútua
Thread A
secção crítica
pedido unlock (liberta o
lock (adquire o cadeado)
cadeado)
Cadeado
bloqueio lock
(adquire o
cadeado)
unlock (liberta o
Thread B pedido cadeado)
sem progresso secção crítica
Tempo
Cadeados Intrínsecos
synchronized
Exemplo Synchronized (Stack)
●
●
●
20
1000 1
Exercício 1 - Resolução
Exercício 1 - Resolução
Exercício 1 - Resolução
Contador
0
Coordenação
● produtor-consumidor
Produtor de Números
Consumidor
Recurso Partilhado
Sem Coordenação
4
Coordenação entre Threads
não só sincronizar
Coordenação entre Threads
dentro
wait(0) wait()
Exemplo
Métodos notify() e notifyAll()
notify
notifyAll
Exercício 2
Exercício 2 - Resolução
Produtor: Chefe de cozinha O produtor é Consumidor: Empregado
uma Thread.
O consumidor
é uma Thread.
O chefe está
constantemente a O empregado está
tentar colocar um prato, constantemente a
ficando em espera tentar ir buscar um
quando o último ainda prato, ficando em espera
não foi servido quando ainda não foi
cozinhado
Exercício 2 - Resolução
Recurso Partilhado: Restaurante
A sincronização é
sempre feita no recurso
partilhado. Depois de uma refeição
Esta é a única forma de ser produzida ou
garantir exclusão mútua consumida, todos as
no acesso à região threads são notificadas.
crítica, pois o cadeado Assim, são acordados
usado para a todos os produtores e
sincronização entre o todos os consumidores,
produtor e o que verificam a guarda
consumidor é o mesmo, do while e avançam, se
o do restaurante.. estiverem em condições
Exercício 2 - Resolução
Há apenas uma instância do
recurso partilhado, que é
Objeto trocado: Refeição Main de teste passada tanto aos
produtores como aos
consumidores. Daí o nome
“recurso partilhado”.
Exercício 3