Академический Документы
Профессиональный Документы
Культура Документы
Programao Concorrente
Programao Concorrente
Atividade apresentada a Universidade Estadual do Sudoeste da Bahia, Curso de Cincia da Computao, como avaliao da disciplina Programao Concorrente no perodo letivo 2013.1.
Questo 1) Elabore um programa java p/ obter o nmero total de linhas de N arquivos texto. import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; /** * Classe LinhasSemThread: classe que importar arquivos e contar a quantidade de * linhas usando * os respectivos mtodos: main e contarlinhas * @author Raissa Arruda de Arajo e Vinicius Brito Cardoso */ public class LinhasSemThread { /** * Mtodo principal da classe: * @param args */ public static void main(String[]args){ String dir = "C:\\Users\\Raissa\\Documents\\NetBeansProjects" + "\\TrabalhoConcorrente\\arquivos"; File diretorio = new File(dir); File[] listaArquivos= diretorio.listFiles(); int i= listaArquivos.length ; int linhasTotal=0; for(int j=0; j<listaArquivos.length; j++){ File arquivos = listaArquivos[j]; linhasTotal= linhasTotal + contarlinhas(arquivos); } System.out.println("O total de linhas nos "+listaArquivos.length+ " arquivos : "+linhasTotal); } /** * Mtodo contarLinhas * @param f do tipo arquivo * @return inteiro com o total de linhas de um arquivo */
//enquanto houver mais linhas while (br.ready()) { //l a proxima linha String linha = br.readLine(); //faz algo com a linha contador++; } br.close(); fr.close(); return contador; /** * @throws IOException: excees de entrada e saida * exemplo: arquivo no existe. */ } catch (IOException ex) { ex.printStackTrace(); } System.out.println(contador); return contador; } } 2) Elabore um programa Java multhreading utilizando semaforos p/ obter o nmero total de linhas de N arquivos de texto. Comparar o tempo de execuo de 1 e 2 e gerar um grfico.
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.concurrent.Semaphore; import java.util.logging.Level; import java.util.logging.Logger; /** * Classe: Leitor Linhas : Classe estendida de Thread que possui metodos para * ler e contar linhas de vrios arquivos * @author Raissa Arruda de Arajo e Vinicius Brito Cardoso
*/ public class LeitorLinhas extends Thread { public FileReader arquivoParaLer; public static int numLinhaGeral; public Semaphore semaforo = new Semaphore(1); String nome; /** * Construtor da classe * @param entrada * @param nome */ public LeitorLinhas(FileReader entrada, String nome) { arquivoParaLer = entrada; this.nome = nome; } /** * Mtodo gravarLinhas : adiciona uma linha ao contador numLinhaGeral * @param linhas */ public void gravarLinhas(int linhas) { numLinhaGeral += linhas; System.out.println("A " + nome + " leu " + linhas + " linhas"); } /** * Mtodo run(): sobrepe o mtodo, ler um arquivo para contar linhas */ @Override public void run() { String str; int numLinhas = 0; BufferedReader linhasDoArquivo = new BufferedReader(arquivoParaLer); try { while (linhasDoArquivo.ready()) { str = linhasDoArquivo.readLine(); numLinhas++; } arquivoParaLer.close(); } catch (IOException ex) { Logger.getLogger(LeitorLinhas.class.getName()).log(Level.SEVERE, null, ex); } try { semaforo.acquire(); } catch (InterruptedException ex) {
public class Principal { /** * Mtodo principal * @param args * @throws FileNotFoundException */ public static void main(String[] args) throws FileNotFoundException { int numeroDeArquivos = 0; int saida = 0; String dir = "C:\\Users\\Raissa\\Documents\\NetBeansProjects" + "\\TrabalhoConcorrente\\arquivos"; File pasta = new File(dir); File[] listaArquivos = pasta.listFiles(); int quantArquivos = listaArquivos.length; /** * Instacia um objeto da classe LeitorLinhas */ LeitorLinhas[] leitores = new LeitorLinhas[quantArquivos]; for (int i = 0; i < listaArquivos.length; i++) { FileReader f = new FileReader(listaArquivos[i]); String nomeThread = "Thread " + i; leitores[i] = new LeitorLinhas(f, nomeThread); leitores[i].start(); } for (int i = 0; i < leitores.length; i++) { try { leitores[i].join(); } catch (InterruptedException ex) { Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex); } } System.out.println("O total de linhas nos " + listaArquivos.length + " arquivos : " + LeitorLinhas.numLinhaGeral);
Uma Thread
TEMPO(MILISSEGUNDOS)
3) Elaborar um programa C utilizando a biblioteca MPI p/ calcular a transposta de uma matriz NxN #include "mpi.h" #include <stdio.h>
int main (int argc, char *argv[]){ int tam =4; int rank, size; int matrizOrigem[tam][tam], matrizResultado[tam][tam] = {0}; int linha,coluna,k;
/* Inicializando e imprimindo a matriz A */ printf("\n\nMatriz A:\n"); for(linha = 0; linha < tam-1; linha++){ for(coluna = 0; coluna < tam-1; coluna++){ printf("Hello from processor %d \n", rank); matrizOrigem[linha][coluna] = rand()%9; printf("%d ", matrizOrigem[linha][coluna]); } printf("\n"); }
/* Responsvel pelo calculo matriz transposta */ for(linha = 0; linha < tam-1; linha++){ for(coluna = 0; coluna < tam-1; coluna++){ matrizResultado[linha][coluna]=matrizOrigem[coluna][linha]; } } /* Imprimindo a matrizResultado */ printf("\nResultado de AxB:\n"); for(linha= 0; linha < tam-1; linha++){ for(coluna = 0; coluna < tam-1; coluna++) printf("Hello from processor %d n", rank); printf("%d ",matrizResultado[linha][coluna]); printf("\n"); } printf("\n\n");