160 likes | 252 Views
Concorrência em LI2 Monitor e Rendevouz. Projeto de PLP – 2 a fase Daniel Pereira – {dtvp} Petrus Bastos – {prb} Rafael Ribeiro – {rar}. Programação Concorrente. Lembram do Race Condition? x := x + 1 Exclusão mútua resolve! synch (a) { a := a + 1; }
E N D
Concorrência em LI2Monitor e Rendevouz Projeto de PLP – 2a fase Daniel Pereira – {dtvp} Petrus Bastos – {prb} Rafael Ribeiro – {rar}
Programação Concorrente Lembram do Race Condition? x := x + 1 • Exclusão mútua resolve! synch (a) { a := a + 1; } Mas será que é suficiente?
Programação Concorrente • Qual o valor da variável global x no final da execução de duas tarefas concorrentes com exclusão mútua? Task 1 Task 2 x := x + 1; x := x + 2; • E agora? Task 1 Task 2 x := x + 1; x := x * 2;
Programação Concorrente • Definições • Interleaved Concurrency • Overlapped Concurrency • Vantagens • Desempenho e uso efetivo do hardware • Realidade naturalmente concorrente • Simulações • Uso de I/O
Mecanismos de Comunicação • Memória compartilhada • A linguagem deve prover mecanismos que providenciem exclusão mútua • Objetos protegidos • Encapsulam as regras de acesso • Rendezvous • Sincronismo entre linhas de execução
task Soma is entry sum(); end Soma; task body Soma is null; begin accept sum() do null; end sum; x := x + 1; end Soma; task Multiplica is entry mult(); end Multiplica; task body Multiplica is null; begin accept mult() do null; end mult; x := x * 1; end Multiplica; Determinismo em ADA95
Inter1 Inter2 Inter3 Int. N-1 InterN Inter1 Inter2 Inter3 Int. N-1 InterN Rendezvous–Aplicações • Produtor – Consumidor • Join no Diagrama de Atividades UML
Alterações na BNF • Inserção de blocos de execução: Comando ::= ComandoSimples | Paralelismo ComandoSimples ::= …….. | SequenciaComando ……. PSequenciaComando ::= <LBRACE> ( ComandoSimples <SEMICOLON> )* <RBRACE>
Alterações na BNF • Para implementação do Rendezvous PComandoSimples ::= .... | Sleep | Wait | Notify | ChamadaProcedimento | WaitRendezvous | ChamadaRendezvous
Classes do Projeto • Criadas: • SequenciaComandos.java • ChamadaRendezvous.java • DeclaracaoRendezvous.java • DefRendezvous.java • Rendezvous.java • ExecucaoRendezvous.java • WaitRendezvous.java • RendezvousJaDeclaradoException.java • RendezvousNaoDeclaradoException.java
Classes do Projeto • Modificadas: • Imperative2.jj • AmbienteCompilacaoImperativa2.java • AmbienteExecucaoImperativa2.java • ContextoCompilacaoImperativa2.java • ContextoExecucaoImperativa2.java
Referências • [1] Burns, Alan; Wellings, Andy - Concurrency in Ada, Second Edition, Cambridge University Press 1998; • [2] Cohen, Norman H. – Ada as a Second Language, McGraw-Hill 1996; • [3] Watt, D; Wichmann, B.; Findlay, W. – ADA: Language and Methodology, Prentice-Hall 1987.