TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Atividade Laboratorio

Por:   •  17/5/2017  •  Pesquisas Acadêmicas  •  1.607 Palavras (7 Páginas)  •  180 Visualizações

Página 1 de 7

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)?  A execução o valor da variável é mudado.

O valor de s é: 1350639

2. Execute o programa Ex01.java.

3. Execute o programa várias vezes e observe os resultados impressos na tela.

Ele solicita que seja criado uma classe.

4. Os valores impressos foram sempre o valor esperado? Se não, por que isso aconteceu?

São os valores esperados, a cada tarefa executada, ocorre a concatenação de s.

 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ê

Sim. Pois a quantidade de threads foi alterada e diminuiu, recebendo o valor de s por ter somente um laço de repetição.

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ê? A variável y começa null, é possível sim, pois você pode alterar o valor da variável x na r2 para 3, ou alterar o y para y=1+2.

  1. 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.

Thread-1 esta executando...

Thread-0 esta executando...

Thread-2 esta executando...

Thread-2 terminou!

Valor de y = null

Thread-0 terminou!

Thread-1 terminou!

Só é alterado a ordem.

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.

public class Consumidora extends Thread {

    private int idConsumidora;

    private Buffer pilha;

    private int totalConsumir;

    private boolean disponivel;

    private String conteudo;

 

    public Consumidora(int id, Buffer p, int totalConsumir) {

        idConsumidora = id;

        pilha = p;

        this.totalConsumir = totalConsumir;

    }

 

    public void run() {

        for (int i = 0; i < totalConsumir; i++) {

            pilha.get(idConsumidora);

        }

        System.out.println("Consumidor #" + idConsumidora + " concluido!");

    }

   

    public synchronized String get(int idConsumidora) {

    while (disponivel == false) {

        try {

            System.out.println("Consumidora #" + idConsumidora

                    + " esperado...");

            wait();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    System.out.println("Consumidora #" + idConsumidora + " consumiu: "

            + conteudo);

    disponivel = false;

    notifyAll();

    return conteudo;

}

}

public class Produtora extends Thread {

    private int idProdutora;

    private Buffer pilha;

    private int producaoTotal;

    private boolean disponivel;

    private int conteudo;

 

    public Produtora(int id, Buffer p, int producaoTotal) {

        idProdutora = id;

        pilha = p;

        this.producaoTotal = producaoTotal;

    }

 

    public void run() {

        for (int i = 0; i < producaoTotal; i++) {

            pilha.set(idProdutora, i);

        }

        System.out.println("Produtora #" + idProdutora + " concluido!");

    }

    public synchronized void set(int idProdutora, int valor) {

...

Baixar como (para membros premium)  txt (7.3 Kb)   pdf (44.5 Kb)   docx (13.4 Kb)  
Continuar por mais 6 páginas »
Disponível apenas no TrabalhosGratuitos.com