Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* 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". */
- #include <stdio.h>
- #include <stdlib.h>
- #include <pthread.h>
- #include <unistd.h>
- #include <time.h>
- #define NUMBER 290000
- #define SCHEDULER_MAIN 0
- #define SCHEDULER_COUNTER 1
- int count = 0;
- long int tempo;
- pthread_t t_counter;
- pthread_t t_controller;
- pthread_mutex_t mutex;
- void *counting(void *arg);
- void *controlling(void *arg);
- int main()
- {
- printf("Benvenuto nel mio programma.\n");
- tempo = time(NULL);
- sleep(1.5);
- pthread_mutex_init(&mutex, NULL);
- pthread_create(&t_counter, NULL, &counting, NULL );
- pthread_create(&t_controller, NULL, &controlling, NULL);
- pthread_join(t_counter, NULL);
- pthread_join(t_controller, NULL);
- printf("Grazie per avere usufruito del programma.\n");
- }
- void *counting(void *arg)
- {
- pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
- do
- {
- pthread_mutex_lock(&mutex);
- count ++;
- printf("Count = %d\n", count);
- pthread_mutex_unlock(&mutex);
- sleep(0.1);
- } while(1);
- }
- void *controlling(void *arg)
- {
- do
- {
- pthread_mutex_lock(&mutex);
- if(count == NUMBER)
- {
- printf("E' stato raggiunto il numero %d\nTempo impiegato: %ld secondi\n", NUMBER, (time(NULL) - tempo));
- pthread_cancel(t_counter);
- pthread_exit(NULL);
- }
- pthread_mutex_unlock(&mutex);
- sleep(0.1);
- } while(1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement