Advertisement
Guest User

Untitled

a guest
Nov 29th, 2016
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* Ci sono tre thread: main, controllore e incrementatore. C'è una variabile intera in comune. L'incrementatore incrementa di 1 la variabile intera, il controllore controlla se la variabile sia uguale ad un certo valore deciso dall'utente. Se non è vero, passa il turno all'altro thread. Se è vero, interrompe l'altro thread e si chiude. In tutto ciò, dopo avere avviato i due thread, il main li joina attendendone la fine. Una volta conclusi, il main scrive "Grazie per avere usufruito del programma". */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <pthread.h>
  6. #include <unistd.h>
  7. #include <time.h>
  8.  
  9. #define NUMBER 290000
  10.  
  11. #define SCHEDULER_MAIN 0
  12. #define SCHEDULER_COUNTER 1
  13.  
  14. int count = 0;
  15. long int tempo;
  16. pthread_t t_counter;
  17. pthread_t t_controller;
  18. pthread_mutex_t mutex;
  19.  
  20. void *counting(void *arg);
  21. void *controlling(void *arg);
  22.  
  23. int main()
  24. {
  25.   printf("Benvenuto nel mio programma.\n");
  26.   tempo = time(NULL);
  27.   sleep(1.5);
  28.   pthread_mutex_init(&mutex, NULL);
  29.   pthread_create(&t_counter, NULL, &counting, NULL );
  30.   pthread_create(&t_controller, NULL, &controlling, NULL);
  31.   pthread_join(t_counter, NULL);
  32.   pthread_join(t_controller, NULL);
  33.   printf("Grazie per avere usufruito del programma.\n");
  34. }
  35.  
  36. void *counting(void *arg)
  37. {
  38.   pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
  39.   do
  40.     {
  41.       pthread_mutex_lock(&mutex);
  42.       count ++;
  43.       printf("Count = %d\n", count);
  44.       pthread_mutex_unlock(&mutex);
  45.       sleep(0.1);
  46.     } while(1);
  47. }
  48.  
  49. void *controlling(void *arg)
  50. {
  51.   do
  52.     {
  53.       pthread_mutex_lock(&mutex);
  54.       if(count == NUMBER)
  55.     {
  56.       printf("E' stato raggiunto il numero %d\nTempo impiegato: %ld secondi\n", NUMBER, (time(NULL) - tempo));
  57.       pthread_cancel(t_counter);
  58.       pthread_exit(NULL);
  59.     }
  60.       pthread_mutex_unlock(&mutex);
  61.       sleep(0.1);
  62.     } while(1);
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement