unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/unidade3.pdf · unidade 3 controle de...
TRANSCRIPT
![Page 1: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/1.jpg)
Unidade 3
Controle de Concorrência
Primitivas de Programação Concorrente Clássica
![Page 2: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/2.jpg)
Programação Concorrente
• A abstração de programação concorrente é o
estudo de sequências de execução
intercaladas, de instruções atômicas de
processos sequenciais.processos sequenciais.
• A abstração de programação concorrente trata
com sequências intercaladas de instruções
atômicas.
![Page 3: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/3.jpg)
Abstração
• Assim, em nossa abstração, cada processo é
considerado como operando sobre seu considerado como operando sobre seu
próprio processador.
![Page 4: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/4.jpg)
Possíveis interações
• Somente temos que considerar possíveis interações em dois
casos:
– Contenção: Dois processos competem pelo mesmo
recurso: acessando uma célula de memória ou canal em recurso: acessando uma célula de memória ou canal em
particular ou computando recursos em geral.
– Comunicação: Dois processos podem necessitar se
comunicar causando informação ser passada de um ao
outro. Precisam se sincronizar: concordar que um certo
evento tem tomado lugar entre eles.
![Page 5: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/5.jpg)
Problema
N := 0
Processo P1:
begin N := N + 1 endbegin N := N + 1 end
Processo P2:
begin N := N + 1 end
![Page 6: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/6.jpg)
Variável incrementada por dois
processos P1 e P2
Processo Instrução Valor de N
Inicialmente 0
P1 INC N 1
P2 INC N 2
![Page 7: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/7.jpg)
Variável incrementada por dois
processos P1 e P2
Processo Instrução Valor de N
Inicialmente 0Inicialmente 0
P2 INC N 1
P1 INC N 2
![Page 8: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/8.jpg)
• Se o compilador traduz a instrução de mais
alto nível em uma única instrução INC,
qualquer intercalação das sequências de qualquer intercalação das sequências de
instruções dos dois processos, dará o memso
valor.
![Page 9: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/9.jpg)
• Por outro lado se toda a computação é feita
em registradores, o código compilado
parecerá como o código:
Processo Instrução N R1 R2Processo Instrução N R1 R2
Inicial 0 - -
P1 Load R1 0 0 -
P2 Load R2 0 0 0
P1 Add R1, 1 0 1 0
P2 Add R2, 1 0 1 1
P1 Store R1,N 1 1 1
P2 Store R2,N 1 1 1
![Page 10: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/10.jpg)
• Assim, a correção de um programa
concorrente depende das instruções atômicas
usadas pelo processador.
• Instruções atômicas assumem a existência de
memória comum acessível a todos os
processos.
![Page 11: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/11.jpg)
• Memória comum pode ser usada em dois
modos, os quais diferem somente em o que é
acessado pelo processos:
– Dados globais que podem ser lidos e escritos por
mais do que um processo.
– Código de rotinas de SO, que podem ser
chamadas por mais do que um processo.
![Page 12: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/12.jpg)
• Instruções em memória comum são eficientes
para implementar sobre um único
processador /computador sendo processador /computador sendo
compartilhado por vários processos.
![Page 13: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/13.jpg)
Problema da Exclusão Mútua
para N Processos
• N processos estão executando em um loop
infinito, uma sequência de instruções que
podem ser divididas dentro de subsequências:
uma seção crítica e uma seção não crítica.uma seção crítica e uma seção não crítica.
P programa deve satisfazer a propriedade de
exclusão mútua: instruções em seções críticas
de dois ou mais processos não devem ser
intercaladas.
![Page 14: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/14.jpg)
Loop
Seção Não-Crítica;
Pre-Protocolo;Pre-Protocolo;
Seção Crítica;
Pos-Protocolo;
End Loop;
![Page 15: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/15.jpg)
• A solução será descrita por inserir dentro do
Loop instruções adicionais que serão
executadas por um processo desejando entrarexecutadas por um processo desejando entrar
(Pre-Protocolo) e deixar (Pos-Protocolo) a sua
seção crítica.
![Page 16: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/16.jpg)
• Um processo pode parar em sua seção Não Crítica.
• Não pode parar a execução em seus • Não pode parar a execução em seus protocolos e Seção Crítica.
• Se um processo pára em sua Seção Não-Crítica, ele não deve interferir sobre outros processos.
![Page 17: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/17.jpg)
Deadlock
• O programa não pode entrar em deadlock.
Se alguns processos estão tentando entrar em Se alguns processos estão tentando entrar em
sua Seção-Crítica então um deles deve ser,
eventualmente, bem sucedido.
![Page 18: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/18.jpg)
Starvation
• Nenhum starvation deve existir de um dos
processos .
Se um processo indica sua intenção para Se um processo indica sua intenção para
entrar em sua Seção-Crítica, por começar a
execução do seu Pre-Protocol, eventualmente,
ele será bem sucedido.
![Page 19: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/19.jpg)
Contenção
• Na ausência de contenção (processos não
competem por um mesmo recurso) para a
Seção-Crítica, um único processo desejando Seção-Crítica, um único processo desejando
entrar em sua Seção-Crítica será bem
sucedido.
![Page 20: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/20.jpg)
Semáforos
• Um semáforo S é uma variável inteira que
pode tomar somente valores não negativos.
• Duas operações são definidas sobre um
semáforo S.
![Page 21: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/21.jpg)
Semáforos
• Wait(S) - Se S>0 então S:=S-1, senão suspende
a execução do processo. O processo é dito
estar suspenso sobre o Semáforo S.
• Signal (S) – Se existem processos que tem sido
suspensos sobre o semáforo S, acorde um
deles. Senão S:=S+1.
![Page 22: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/22.jpg)
Propriedades dos Semáforos
• Wait(S) e Signal(S) são instruções atômicas.
Nenhuma instrução pode ser intercalada entre
o teste S>0 e o decremento de S, ou nenhuma o teste S>0 e o decremento de S, ou nenhuma
instrução pode ser intercalada entre a
verificação da suspensão de processos e o
incremento de S.
![Page 23: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/23.jpg)
Propriedades dos Semáforos
• A um semáforo S deve ser dado um valor
inicial não negativo qualquer.
• A operação Signal (S) deve acordar um dos
processos suspensos. A definição não
especifica qual processo deverá ser acordado.
![Page 24: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/24.jpg)
Exclusão Mútua com Semáforos
S: Semaphore :=1
P1: loop
Seção-Não-Crítica-1;
wait(s);wait(s);
Seção-Crítica-1;
Signal(S);
end loop;
![Page 25: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/25.jpg)
Exclusão Mútua com Semáforos
P2: loop
Seção-Não-Crítica-2;
wait(s);wait(s);
Seção-Crítica-2;
Signal(S);
end loop;
![Page 26: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/26.jpg)
Propriedades de Semáforos
• Teorema 1: A propriedade de exclusão mútua
é satisfeita.
• Teorema 2: O programa não tem deadlock.
• Teorema 3: Não existe starvation.
![Page 27: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/27.jpg)
Monitores
• Semáforos : Solução para problemas comuns.
• Semáforos : Primitiva de baixo nível.• Semáforos : Primitiva de baixo nível.
• Semáforos : Em grandes sistemas, usar semáforo somente, a responsabilidade para o correto uso de semáforos é difundida entre todos os implementadores do sistema.
![Page 28: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/28.jpg)
Deadlock com Semáforos
• Se um implementador esquece de chamar um
Signal(S) após uma seção crítica, o programa Signal(S) após uma seção crítica, o programa
pode entrar em deadlock e a causa da falha
será difícil de isolar.
![Page 29: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/29.jpg)
Monitores
• Proporcionam uma primitiva de programação
concorrente estruturada, que concentra a
responsabilidade de correção em poucos responsabilidade de correção em poucos
módulos.
• Tipo de Dados baseado em estado.
![Page 30: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/30.jpg)
Monitores
• Seções críticas para alocação de dispositivos
de I/O ou alocação de memória são de I/O ou alocação de memória são
centralizados em um programa privilegiado.
![Page 31: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/31.jpg)
Monitor
• Programas ordinários requerem serviços que
são realizados pelo monitor central.
• Temos um programa que manipula todos as
requisições de serviços envolvendo
dispositivos compartilhados ou estruturas de
dados.
![Page 32: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/32.jpg)
Monitor
• Podemos definir um monitor separado para
cada objeto ou grupo de objetos relacionados.
• Processos podem requisitar serviços de vários
monitores.
![Page 33: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/33.jpg)
Monitor
• Se um mesmo monitor é chamado por dois
processos, a implementação do monitor
garante que esses processos são executados garante que esses processos são executados
serialmente para preservar exclusão mutua.
• Se monitores diferentes são chamados, os
processos podem ser intercalados.
![Page 34: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/34.jpg)
Monitor
• A sintaxe de monitores é baseada no
encapsulamento de itens de dados e os
procedimentos que operam sobre esses itens,
colocados dentro de um único módulo.colocados dentro de um único módulo.
• A interface para um monitor consistirá de um
conjunto de procedimentos.
![Page 35: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/35.jpg)
Monitor
• Esses procedimentos operam sobre dados que
são ocultos dentro do módulo.
• Um monitor não somente protege os dados • Um monitor não somente protege os dados
internos de acessos inrestristos, mas também
sincroniza as chamadas aos procedimentos da
interface.
![Page 36: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/36.jpg)
Monitor
• A implementação garante que os
procedimentos são executados sob exclusão
mútua sob variáveis globais.
• Na semântica de um monitor, somente um
processo é permitido executar uma operação
no monitor em qualquer tempo.
![Page 37: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/37.jpg)
Monitor
• Monitor define uma primitiva de
sincronização que permitirá um processo
suspender ele próprio.
• O monitor não é um processo, mas um
módulo estático de dados e declarações de
procedimentos (procedures).
![Page 38: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/38.jpg)
Monitor Produtor-Consumidor
Monitor Produtor_Consumidor
B: array(0..N-1) of integer;B: array(0..N-1) of integer;In_Ptr, Out_Ptr: Integer := 0;Count:Integer := 0;Not_Full, Not_Empty: Condition;
![Page 39: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/39.jpg)
Produtor coloca ítem no Buffer B
Procedure Append (I: in Integer)
Begin If Count = N then WAIT (Not_Full) ;If Count = N then WAIT (Not_Full) ;
B(In-Ptr) := I;
In_Ptr := (In_Ptr) mod N;
SIGNAL (Not_Empty) ;
End Append;
![Page 40: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/40.jpg)
Consumidor retira ítem do Buffer B
Procedure Take (I: out Integer)Begin
If Count = 0 then WAIT (Not-Empty) ;If Count = 0 then WAIT (Not-Empty) ;
I := B(Out_Ptr);Out_Ptr := (Out_Ptr + 1) mod N;
SIGNAL (Not_Full) ;End Take;
![Page 41: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/41.jpg)
Processo Producer
Process Producer
I: Integer;
begin
loop loop
Produce (I);
Append (I);
end loop;
end Producer
![Page 42: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/42.jpg)
Processo Consumidor
Process Consumer
I: Integer;
begin
looploop
Take (I) ;
Consumer (I);end loop;
end Consumer;
![Page 43: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/43.jpg)
Operações do Monitor
• WAIT e SIGNAL aqui, não tem nenhuma
relação com as duas primitivas usadas em
operações de semáforo.operações de semáforo.
• Para sincronização são definidas Variáveis de
Condição: Not_Empty e Not_Full.
![Page 44: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/44.jpg)
Variáveis de Condição
• Not_Empty : Usada pelo consumidor para
suspender ele próprio, até que o buffer seja
não vazio.não vazio.
• Not_Full : Usada pelo produtor para
suspender ele próprio, quando o buffer estiver
cheio.
![Page 45: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/45.jpg)
Três Operações sobre
Variáveis de Condição
• WAIT(C) pode ser lido: “Estou esperando para C ocorrer”.
O processo que chamou a procedure do monitor contendo esta declaração, é suspenso sob uma fila FIFO associada com C.
• SIGNAL(C) pode ser lido: “Estou sinalizando • SIGNAL(C) pode ser lido: “Estou sinalizando que C ocorreu”.
Se a fila para C é não vazia, então acorde o processo na cabeça da fila.
• NON_EMPTY(C) : Uma função booleana que retorna true se a fila para C é não vazia.
![Page 46: Unidade 3 - inf.ufsc.brbosco.sobral/ensino/ine5645/Unidade3.pdf · Unidade 3 Controle de Concorrência Primitivas de Programação Concorrente Clássica. Programação Concorrente](https://reader033.vdocuments.mx/reader033/viewer/2022050404/5f81aba51e360c26f75dfc37/html5/thumbnails/46.jpg)
Tarefa Avulsa 2 – Entregar na aula
do dia 23/03
• Implementar em Java, a solução Monitor apresentada para o Problema do Produtor x Consumidor com buffer limitado.
• Consultar Deitel, “Java : Como Programar”,
Páginas 783-787.Páginas 783-787.
• Ver o modificador de métodos: synchronized para implementar o monitor.
• Os processos Produtor e o Consumidor deverão ser implementados como Threads.