nicb

Ese1 Mutex Salvatore

Jul 17th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.38 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <pthread.h>
  5. #include <time.h>
  6. pthread_t *tid;
  7. int lettera;
  8. int finito=0;
  9. char *matrice;
  10. int riga;
  11. int n;
  12. pthread_mutex_t accedi;
  13. void *ricerca(void *arg)
  14. {
  15.     int *dati=(int *)arg;
  16.     int rig=*dati;
  17.     printf("\nControllo la riga: %d",rig);
  18.     int i;
  19.     for(i=0;i<n;i++)
  20.         {
  21.             pthread_mutex_lock(&accedi);
  22.                     if(finito==0)
  23.                     {
  24.                         pthread_mutex_unlock(&accedi);
  25.                         if(lettera==matrice[rig*n+i])
  26.                             {
  27.                                 printf("\nSono il Thread %d ed ho trovato l'occorrenza alla colonna %d",rig,i);
  28.                                 pthread_mutex_lock(&accedi);
  29.                                     finito=1;
  30.                                 pthread_mutex_unlock(&accedi);
  31.                             }
  32.                     }else
  33.                     {
  34.                     pthread_mutex_unlock(&accedi);
  35.                     pthread_exit(0);
  36.                     }
  37.  
  38.     }
  39.     printf("\nNon ho trovato alcuna occorrenza!!");
  40.     pthread_exit(0);       
  41. }
  42. int main(int argc,char **argv)
  43. {  
  44.     n=atoi(argv[1]);
  45.     matrice=(char *) malloc((n*n)*sizeof(char));
  46.     int i,j;   
  47.     lettera=argv[2][0];
  48.     printf("\nLettera: %c",lettera);
  49.     for(i=0;i<n;i++)
  50.         for(j=0;j<n;j++)
  51.             {
  52.                 matrice[i*n+j]=(rand()%25)+97;
  53.                 (j%n!=0)?printf("%c ",matrice[i*n+j]):printf("\n%c ",matrice[i*n+j]);
  54.             }
  55.            
  56.     ///Creo i thread;
  57.     tid=(pthread_t *)malloc(n*sizeof(pthread_t));
  58.     for(i=0;i<n;i++)
  59.         {
  60.         usleep(100);
  61.         pthread_create(&tid[i],NULL,ricerca,&i);
  62.         }
  63.     for(i=0;i<n;i++)
  64.         pthread_join(tid[i],NULL);
  65.        
  66. }
Add Comment
Please, Sign In to add comment