Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Si realizzi un programma in C e Posix sotto Linux che, con l'ausilio della libreria Pthread, lancia n thread
- per calcolare ilprodotto degli elementi di ciascuna riga di una matrice nxn di interi generati casualmente
- in un intervallo [0,255] . Il calcolo del prodotto degli elementi di ciascuna riga deve essere effettuato
- concorrentemente su tutte le righe. Calcolati i prodotti, si provvederà a ricercarne il massimo ed a
- stamparlo a video. La dimensione della matrice può essere fornita in input al programma in fase di
- esecuzione o da riga di comando.
- */
- #include <stdlib.h>
- #include <stdio.h>
- #include <pthread.h>
- #include <time.h>
- void *th_rt(void *arg);
- int *MAT;
- int N;
- long int MAX=-1;
- int row = 0;
- pthread_mutex_t mutexMax = PTHREAD_MUTEX_INITIALIZER;
- int main(int argc, char *argv[]){
- pthread_t *tid;
- int i,j;
- int *row;
- srand(time(NULL));
- if(argc < 2){
- printf("usage: ./a.out <int>\n");
- return -1;
- }
- N = atoi(argv[1]);
- MAT = (int *)malloc(N*N*sizeof(int));
- tid = (pthread_t *)malloc(N*sizeof(pthread_t));
- for(i=0;i<N;i++){
- for(j=0;j<N;j++){
- *(MAT+i*N+j) = rand()%256;
- printf("%d\t",*(MAT+i*N+j));
- }
- printf("\n");
- }
- for(i=0;i<N;i++){
- row = (int *)malloc(sizeof(int));
- *row = i;
- pthread_create(tid+i,NULL,th_rt,(void *)row);
- }
- for(i=0;i<N;i++)
- pthread_join(tid[i],NULL);
- printf("Il Massimo prodotto tra le righe è: %ld\n",MAX);
- return 0;
- }
- void *th_rt(void *arg){
- int i,myRow;
- long int prod;
- myRow = *(int *)arg;
- prod = *(MAT+myRow*N);
- for(i=1;i<N;i++)
- prod *= *(MAT+myRow*N+i);
- printf("(%d) Thread : %ld\n",myRow,prod);
- pthread_mutex_lock(&mutexMax);
- if(prod > MAX) MAX = prod;
- pthread_mutex_unlock(&mutexMax);
- pthread_exit(NULL);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement