Baixe o app para aproveitar ainda mais
Prévia do material em texto
Curso: Bacharelado em Sistemas de Informação Série: 6ª/7ª Turma: Nota: Disciplina: Programação Concorrente Turno: Professor: Diego Silva Data: ___/___/______ Aluno(a): RA: Exercícios Práticos – Laboratório 02 Introdução A comunicação entre threads é normalmente um requisito das aplicações concorrentes. Threads em um mesmo programa podem referenciar variáveis globais ou chamar métodos sobre um objeto compartilhado, dependendo das regras de nomeação e escopo da linguagem de programação utilizada. Cabe ao programador definir as variáveis e objetos compartilhados que serão necessários para a comunicação. O objetivo deste Laboratório é avaliar a operação/execução de programas concorrentes que usam variáveis compartilhadas como mecanismo de comunicação entre threads. Usaremos a linguagem Java para os exemplos. Para cada atividade, siga o roteiro proposto e responda a todas as questões colocadas antes de passar para a próxima atividade. Atividade 1 Objetivo: Mostrar um exemplo simples de programa com uma variável compartilhada entre threads, e os possíveis efeitos indesejáveis do acesso compartilhado. Roteiro: 1. Abra o arquivo Ex01.java e entenda o que ele faz. Qual saída é esperada para o programa (valor final da variável s)? 2. Execute o programa Ex01.java. 3. Execute o programa várias vezes e observe os resultados impressos na tela. 4. Os valores impressos foram sempre o valor esperado? Se não, por que isso aconteceu? 5. Altere o número de threads no programa para 1 (QTD_THREADS 1), compile e execute novamente o programa várias vezes. Os valores impressos foram sempre o esperado? Por quê? Relatório da atividade: Em um arquivo .txt descreva as respostas das questões colocadas e mostre os diferentes resultados obtidos nas execuções realizadas. Atividade 2 Objetivo: Mostrar o comportamento não-determinístico de um programa com três threads. Roteiro: 1. Abra o arquivo Ex02.java e entenda o que o programa faz. Quais são os possíveis valores finais da variável y? É possível y terminar com valor 3 (combinação binária dos números 1 e 2)? Por quê? Anhanguera Educacional Taguatinga – FACNET 2. Execute o programa várias vezes e observe os resultados impressos na tela. Altere o código do programa modificando a ordem em que as threads são criadas e repita as execuções. Relatório da atividade: Em um arquivo .txt descreva as respostas das questões colocadas e mostre os diferentes resultados obtidos nas execuções realizadas. Atividade 3 Objetivo: Projetar e implementar uma aplicação concorrente que usa memória compartilhada para permitir a interação entre as diferentes threads da aplicação. Descrição do problema: A aplicação deve implementar dois comportamentos distintos: (A) produzir dados que são depositados em uma área comum; (B) consumir os dados gerados retirando-os da área comum. Para cada comportamento descrito, implemente uma thread dentro da aplicação. As restrições do problema são: (i) a thread produtora só pode incluir dados em slots vazios da área comum (i.e., não pode ocorrer sobrescrita de dados que ainda não foram consumidos); (ii) a thread consumidora não pode retirar um dado de um slot vazio; (iii) os dados devem ser retirados na mesma ordem em que foram inseridos, i.e., o primeiro dado a ser inserido deve ser o primeiro dado a ser retirado/consumido. Roteiro: 1. Projete uma solução para a aplicação com uma thread produtora e uma thread consumidora. Use como área comum de depósito de dados um buffer de tamanho N. 2. Planeje como testar/validar a sua aplicação, de que maneira será possível verificar que a solução proposta atende ou não as restrições do problema. 3. Implemente e teste a solução proposta. 4. Estenda a solução anterior considerando a possibilidade de ter um número variável de threads produtoras e consumidoras. Relatório da atividade: Em um arquivo .txt descreva o projeto da solução e dos testes. Acrescente seu nome e numero de matrıcula no relatorio gerado e o envie no moodle, junto com o codigo fonte do programa implementado nessa atividade.
Compartilhar