Escolar Documentos
Profissional Documentos
Cultura Documentos
Concorrente e Distribuída
Coordenação de Threads
Sincronização
Sumário
• O que é a coordenação de threads.
FILME
• Quais os mecanismos de coordenação:
– wait
– notify/notifyAll
Sincronização
• Permite evitar a interferência entre threads no
acesso a recursos partilhados
• No entanto as ações de duas ou mais threads
pode exigir mais do que a simples sincronização:
– ordem pela qual as threads acedem aos recursos
partilhados
Sincronização
Coordenação
• Procurar uma palavra num conjunto de documentos
Procuram Recurso partilhado Analisa
resultados
4
2
3
Icon made by Freepik from www.flaticon.com
Sincronização
Coordenação
• Procurar uma palavra num conjunto de documentos
2 4
Coordenação
• Existem 2 problemas
1º colocar 2º retirar
1
2 4
3
Sincronização
Coordenação
• 1º problema: colocação do ficheiro
colocar:
-coloca ficheiro na mesa
1
Problemas:
- perdemos o resultado do
agente 1
2
Coordenação
• 1º problema: colocação do ficheiro
colocar:
-espera pela mesa livre
1 (repete: verifica mesa livre)
Problemas:
2 - thread sempre a verificar
- CPU a 100%
- consumo de energia
- etc...
3
Coordenação
• 2º problema: retirar resultados da mesa
retirar:
- repete: verifica que a
mesa tem um resultado
X Existe resultado?
]
-retira resultado
4 Problemas:
- thread sempre a verificar
- CPU a 100%
- consumo de energia
- etc...
Sincronização
Produtor - Consumidor
• Produtores: um conjunto de threads que
produzem informação.
• Consumidores: um conjunto de threads que usam
a informação.
• Recurso Partilhado: recurso que permite a troca
de informação entre um produtor e um
consumidor
Sincronização
Produtor
• Usa método do recurso partilhado para colocar
• método colocar que deve ter as seguintes
propriedades:
– Permitir acessos em exclusão mutua (acesso sincronizado);
– Caso o recurso partilhado não tenha capacidade para
guardar a informação deve colocar o produtor em espera até
que o seu estado seja alterado (que seja retirada
informação)
Sincronização
Consumidor
• Usa um método do recurso partilhado para retirar,
este método que deve ter as seguintes propriedades:
– Permitir acessos em exclusão mutua (acesso sincronizado);
– Caso o recurso partilhado não tenha nenhuma informação
guardada deve colocar o consumidor em espera até que o
seu estado seja alterado ( que seja colocada nova
informação)
Recurso Partilhado
public class Table{
private SearchResult result;
result = newResult;
}
}
put
public class Table{
private SearchResult result;
wait e notify
wait
1
notify
2 4
3
Sincronização
wait e notify
1 wait
notify
2 4
3
public class Table{
get
private SearchResult result;
public synchronized SearchResult get() {
while(result == null){
try{
wait();
} catch (InterruptedException e) { ... }
}
SearchResult resultToReturn = result;
result = null;
notifyAll(); //tem como objetivo notificar os produtores
return resultToReturn;
}
put
public class Table{
private SearchResult result;
o.wait ()
start()
New Thread Runnable Not-Runnable
o.notify()
Dead
Sincronização
Coordenação no objecto
Sincronização
Coordenação no objecto
1 wait
notify
2
A
A
A 5
3 wait
4
BB
Sincronização
Coordenação no objecto
1 wait
2
A
B
5
B 3 wait notifyAll
4
BB
Mesa para vários resultados
public class Table{
private LinkedList<SearchResult> results =
new LinkedList<SearchResult>();