Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <pthread.h>
- int glob=0;
- long somma=0;
- int finito=0;
- pthread_mutex_t mut1=PTHREAD_MUTEX_INITIALIZER;
- pthread_mutex_t mut2=PTHREAD_MUTEX_INITIALIZER;
- pthread_mutex_t mut3=PTHREAD_MUTEX_INITIALIZER;
- pthread_cond_t cond_controllo=PTHREAD_COND_INITIALIZER;
- pthread_cond_t cond_fine=PTHREAD_COND_INITIALIZER;
- void *genera ()
- {
- int i;
- for(i=0;i<1000;i++)
- {
- pthread_mutex_lock(&mut1);
- glob++;
- somma+=i;
- printf("\nValore di glob = %d",glob);
- pthread_cond_signal(&cond_controllo);
- pthread_mutex_unlock(&mut1);
- pthread_mutex_lock(&mut2);
- if(finito==1)
- {
- pthread_mutex_unlock(&mut2);
- pthread_exit(0);
- }
- pthread_mutex_unlock(&mut2);
- }
- }
- void *controlla(void *arg)
- {
- int *n_ptr=(int *)arg;
- int n=*n_ptr;
- while(1)
- {
- pthread_mutex_lock(&mut2);
- pthread_cond_wait(&cond_controllo,&mut2);
- pthread_mutex_unlock(&mut2);
- pthread_mutex_lock(&mut1);
- pthread_mutex_lock(&mut2);
- printf("\nSONO PASSATO!!\n");
- if(glob>=n)
- {
- finito=1;
- pthread_mutex_unlock(&mut1);
- pthread_mutex_unlock(&mut2);
- pthread_cond_signal(&cond_fine);
- pthread_exit(0);
- }
- pthread_mutex_unlock(&mut1);
- pthread_mutex_unlock(&mut2);
- }
- }
- int main(int argc,char **argv)
- {
- int i,n=atoi(argv[1]);
- ///Creo i 3 Thread
- pthread_t t1,t2,t3;
- pthread_create(&t1,NULL,genera,NULL);
- pthread_create(&t2,NULL,genera,NULL);
- pthread_create(&t3,NULL,controlla,&n);
- pthread_mutex_lock(&mut3);
- pthread_cond_wait(&cond_fine,&mut3);
- pthread_mutex_unlock(&mut3);
- pthread_join(t1,NULL);
- pthread_join(t2,NULL);
- pthread_join(t3,NULL);
- printf("\nValore di glob = %d, limite = %d",glob,n);
- }
Add Comment
Please, Sign In to add comment