Advertisement
Tavi33

SO ##

Dec 20th, 2016
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <pthread.h>
  4.  
  5. int **mat;
  6. int *sums;
  7. int size = 0;
  8.  
  9. pthread_t *threads;
  10.  
  11. void readMatrix(char *fileLocation)
  12. {
  13.   FILE *f;
  14.   f = fopen(fileLocation, "r");
  15.  
  16.   fscanf(f, "%d", &size);
  17.  
  18.  
  19.   mat = malloc(size*sizeof(int *));
  20.   sums = malloc(size*sizeof(int));
  21.   threads = malloc(size*sizeof(pthread_t));
  22.  
  23.  
  24.  
  25.   int i = 0, j = 0;
  26.  
  27.   for(i=0;i<size;++i)
  28.     mat[i]=malloc(sizeof(int));
  29.  
  30.   for(i = 0; i < size; i++)
  31.   {
  32.     for(j = 0; j < size; j++)
  33.     {
  34.       if(!fscanf(f, "%d", &mat[i][j]))
  35.     break;
  36.       //printf("%d", mat[i][j]);
  37.     }
  38.   }
  39.  
  40.   fclose(f);
  41. }
  42.  
  43. void *calculateLine(void *param)
  44. {
  45.   int *prm = (int *)param;
  46.   int i = prm[0];
  47.   int j;
  48.  
  49.   for(j = 0; j < size; j++)
  50.   {
  51.     sums[i] += mat[i][j];
  52.   }
  53.  
  54.   printf("Line %d, sum = %d\n", i, sums[i]);
  55. }
  56.  
  57. void startCalculation()
  58. {
  59.   int i,j,k=0;
  60.  
  61.  
  62.   for(i = 0; i < size; i++)
  63.   {
  64.     int *param = (int *) malloc(sizeof(int));
  65.     param[0] = i;
  66.     pthread_create(&threads[k++], NULL, calculateLine, param);
  67.   }
  68. }
  69.  
  70. void printMatrix()
  71. {
  72.   int i,j;
  73.   for(i = 0; i < size; i++)
  74.   {
  75.     for(j = 0; j < size; j++)
  76.     {
  77.       printf("%d ", mat[i][j]);
  78.     }
  79.     printf("\n");
  80.   }
  81. }
  82.  
  83. int calculateTotal()
  84. {
  85.   int i;
  86.  
  87.   void *returnVal;
  88.   for(i = 0; i < size; i++)
  89.   {
  90.     pthread_join(threads[i], NULL);
  91.   }
  92.  
  93.   int total = 0;
  94.  
  95.   for(i = 0; i < size; i++)
  96.   {
  97.     //printf("sums[%d] =  %d\n", i, sums[i]);
  98.     total += sums[i];
  99.   }
  100.  
  101.   //printf("ret: %d\n", (int)returnVal);
  102.   //free();
  103.   //printf("Total = %d\n", total);
  104.   return total;
  105. }
  106.  
  107. void main(int argc, char* argv[])
  108. {
  109.   if(argc != 2)
  110.   {
  111.     printf("USAGE: %s <fisier>\n", argv[0]);
  112.     exit(-1);
  113.   }
  114.  
  115.   readMatrix(argv[1]);
  116.   printMatrix();
  117.   startCalculation();
  118.   printf("TOTAL: %d\n", calculateTotal());
  119. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement