HyugaPaolo

Struct thread c

Jan 31st, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.68 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <pthread.h>
  5.  
  6. #define MAX_LEN 10
  7.  
  8. struct PARAMDATA
  9. {
  10.     double k;
  11.     int delay;
  12. };
  13.  
  14. pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
  15. pthread_t tVisualizza, tMoltiplica1, tMoltiplica2;
  16.  
  17. int vet[MAX_LEN];
  18. int esci;
  19.  
  20. void *visualizza()
  21. {
  22.     int i = 0;
  23.     while (!esci)
  24.     {
  25.         pthread_mutex_lock(&mutex);
  26.         printf("VET:\n");
  27.         for (i = 0;i<MAX_LEN;i++)
  28.             printf("%d\t", vet[i]);
  29.         printf("\n");
  30.         pthread_mutex_unlock(&mutex);
  31.         usleep(500*1000);
  32.     }
  33. }
  34.  
  35. void *moltiplica(void* args)
  36. {
  37.     struct PARAMDATA *param = (struct PARAMDATA*)args;
  38.     int i;
  39.     while (!esci)
  40.     {
  41.         pthread_mutex_lock(&mutex);
  42.         for (i = 0;i<MAX_LEN;i++)
  43.             vet[i] = vet[i]*(*param).k;
  44.         pthread_mutex_unlock(&mutex);
  45.         usleep((*param).delay*1000);
  46.     }
  47. }
  48.  
  49. int main()
  50. {
  51.     int i = 0;
  52.    
  53.     for (i = 0; i < MAX_LEN; i++)
  54.         if (i%2==0)
  55.             vet[i] = 1;
  56.         else
  57.             vet[i] = -1;
  58.  
  59.     struct PARAMDATA *param1 = malloc(sizeof(struct PARAMDATA));
  60.     (*param1).k=2;
  61.     (*param1).delay=250;
  62.  
  63.     struct PARAMDATA *param2 = malloc(sizeof(struct PARAMDATA));
  64.     (*param2).k = -2;
  65.     (*param2).delay=900;
  66.  
  67.     esci = 0;
  68.  
  69.     pthread_create(&tVisualizza, NULL, visualizza, NULL);
  70.     pthread_create(&tMoltiplica1, NULL, moltiplica, (void *)param1);
  71.     pthread_create(&tMoltiplica2, NULL, moltiplica, (void *)param2);
  72.  
  73.     usleep(10*1000*1000);
  74.  
  75.     esci = 1;
  76.  
  77.     pthread_join(tVisualizza, NULL);
  78.     pthread_join(tMoltiplica1, NULL);
  79.     pthread_join(tMoltiplica2, NULL);
  80. }
Add Comment
Please, Sign In to add comment