Advertisement
Guest User

Multiplicación matrices con threads 2

a guest
Sep 15th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.60 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <pthread.h>
  5.  
  6. #define NUM_THREADS 2
  7. #define size_matriz 3
  8.  
  9. struct parametros {
  10.     int id;
  11.     int fila;
  12.     int columna;
  13.     int matriz_ini[size_matriz][size_matriz];
  14.     int matriz_fin[size_matriz][size_matriz];
  15.     int matriz_res[size_matriz][size_matriz];
  16. };
  17.  
  18. void inicializarMatriz(int m[size_matriz][size_matriz]) {
  19.     for(int i = 0; i < size_matriz; i++){
  20.         for(int j = 0; j < size_matriz; j++){
  21.             m[i][j] = random()*100;
  22.         }
  23.     }
  24. }
  25.  
  26.  
  27. void * multiplicarMatriz(void *arg) {
  28.     struct parametros *p;
  29.     p = (struct parametros *)arg;
  30.  
  31.     p->matriz_res[p->fila][p->columna]= 0;
  32.     for(int i = 0; i < size_matriz; i++){
  33.         p->matriz_res[p->fila][p->columna]+= p->matriz_ini[p->fila][i]*p->matriz_fin[i][p->columna];
  34.     }
  35.  
  36. }
  37.  
  38. void imprimirResultadoMatriz(){
  39.     struct parametros *p;
  40.    
  41.     printf("matriz_ini\n");
  42.     for(int i = 0; i < size_matriz; i++){
  43.         for(int j = 0; j < size_matriz; j++){
  44.             printf("%d-", p->matriz_ini[i][j]);
  45.         }
  46.     }
  47.     printf("matriz_fin\n");
  48.     for(int i = 0; i < size_matriz; i++){
  49.         for(int j = 0; j < size_matriz; j++){
  50.             printf("%d-", p->matriz_fin[i][j]);
  51.         }
  52.     }
  53.     printf("matriz_res\n");
  54.     for(int i = 0; i < size_matriz; i++){
  55.         for(int j = 0; j < size_matriz; j++){
  56.             printf("%d-", p->matriz_res[i][j]);
  57.         }
  58.     }
  59. }
  60.  
  61. void recorridoMultiplicacionMatriz(){
  62.     struct parametros d;
  63.     struct parametros *p = &d;
  64.  
  65.     // struct parametros *p;
  66.     pthread_t threads[NUM_THREADS];
  67.     int rc;
  68.     long t;
  69.     void *status;
  70.  
  71.     p->id = 1;
  72.     inicializarMatriz(p->matriz_ini);
  73.     inicializarMatriz(p->matriz_fin);
  74.  
  75.     for(t=0;t<NUM_THREADS; t++){
  76.     printf("En main: creando el hilo %ld\n", t);
  77.     for(int fila = 0; fila < size_matriz; fila++){
  78.         for(int columna = 0; columna < size_matriz; columna++){
  79.             // printf("lel");
  80.             p->fila = fila;
  81.             // printf("lol");
  82.             p->columna = columna;
  83.             // printf("lal");
  84.             rc = pthread_create(&threads[t],NULL,multiplicarMatriz,(void *)&p);
  85.             // printf("mmm");
  86.             // if(rc){
  87.                 // printf("ERROR; El código que pthread_create() retorno es %d\n",rc);
  88.                 // exit(-1);
  89.             // }
  90.         }
  91.     }  
  92.     }
  93.  
  94.     for(t=0; t<NUM_THREADS; t++){
  95.         rc = pthread_join(threads[t], &status);
  96.         if(rc){
  97.             printf("ERROR; El codigo que pthread_join retorna es %d\n", rc);
  98.             exit(-1);
  99.         }
  100.         printf("Join completado con hilo %ld con estado %ld\n",t,(long)status);
  101.     }
  102.     printf("Programa terminado. Saliendo ...\n");
  103.     pthread_exit(NULL);
  104.  
  105.  
  106. }
  107.  
  108. int main(int argc, char *argv[]) {
  109.     //este programa me debe permitir multiplicar varias matrices en diferente scores
  110.     recorridoMultiplicacionMatriz();
  111.     imprimirResultadoMatriz();
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement