Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <pthread.h>
- int **mat;
- int *sums;
- int size = 0;
- pthread_t *threads;
- void readMatrix(char *fileLocation)
- {
- FILE *f;
- f = fopen(fileLocation, "r");
- fscanf(f, "%d", &size);
- mat = malloc(size*sizeof(int *));
- sums = malloc(size*sizeof(int));
- threads = malloc(size*sizeof(pthread_t));
- int i = 0, j = 0;
- for(i=0;i<size;++i)
- mat[i]=malloc(sizeof(int));
- for(i = 0; i < size; i++)
- {
- for(j = 0; j < size; j++)
- {
- if(!fscanf(f, "%d", &mat[i][j]))
- break;
- //printf("%d", mat[i][j]);
- }
- }
- fclose(f);
- }
- void *calculateLine(void *param)
- {
- int *prm = (int *)param;
- int i = prm[0];
- int j;
- for(j = 0; j < size; j++)
- {
- sums[i] += mat[i][j];
- }
- printf("Line %d, sum = %d\n", i, sums[i]);
- }
- void startCalculation()
- {
- int i,j,k=0;
- for(i = 0; i < size; i++)
- {
- int *param = (int *) malloc(sizeof(int));
- param[0] = i;
- pthread_create(&threads[k++], NULL, calculateLine, param);
- }
- }
- void printMatrix()
- {
- int i,j;
- for(i = 0; i < size; i++)
- {
- for(j = 0; j < size; j++)
- {
- printf("%d ", mat[i][j]);
- }
- printf("\n");
- }
- }
- int calculateTotal()
- {
- int i;
- void *returnVal;
- for(i = 0; i < size; i++)
- {
- pthread_join(threads[i], NULL);
- }
- int total = 0;
- for(i = 0; i < size; i++)
- {
- //printf("sums[%d] = %d\n", i, sums[i]);
- total += sums[i];
- }
- //printf("ret: %d\n", (int)returnVal);
- //free();
- //printf("Total = %d\n", total);
- return total;
- }
- void main(int argc, char* argv[])
- {
- if(argc != 2)
- {
- printf("USAGE: %s <fisier>\n", argv[0]);
- exit(-1);
- }
- readMatrix(argv[1]);
- printMatrix();
- startCalculation();
- printf("TOTAL: %d\n", calculateTotal());
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement