Advertisement
kamillo111

Piwerko

Oct 23rd, 2016
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.90 KB | None | 0 0
  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #include <time.h>
  4. #include<pthread.h>
  5.  
  6.  
  7. void * watek_klient (void * arg);
  8.  
  9. pthread_mutex_t *mutex_tab;
  10. int *mutex_id;
  11. int l_kl, l_kf, l_kr, i;
  12.  
  13. main(){
  14.  
  15.   pthread_t *tab_klient;
  16.   int *tab_klient_id;
  17.  
  18.  
  19.  
  20.   printf("\nLiczba klientow: "); scanf("%d", &l_kl);
  21.  
  22.   printf("\nLiczba kufli: "); scanf("%d", &l_kf);
  23.   mutex_tab= (pthread_mutex_t*) malloc(l_kf*sizeof(pthread_mutex_t);
  24.   mutex_id= (mutex_id*) malloc(l_kf*sizeof(int));
  25.  
  26.  
  27. for(i=0;i<l_kf;i++) {mutex_id[i]=i; pthread_mutex_init(&mutex_tab[i],NULL)  }
  28.   //printf("\nLiczba kranow: "); scanf("%d", &l_kr);
  29.   l_kr = 1;
  30.  
  31.   tab_klient = (pthread_t *) malloc(l_kl*sizeof(pthread_t));
  32.   tab_klient_id = (int *) malloc(l_kl*sizeof(int));
  33.  
  34.   for(i=0;i<l_kl;i++) tab_klient_id[i]=i;
  35.  
  36.  
  37.   printf("\nOtwieramy pub (simple)!\n");
  38.   printf("\nLiczba wolnych kufli %d\n", l_kf);
  39.  
  40.   for(i=0;i<l_kl;i++){
  41.     pthread_create(&tab_klient[i], NULL, watek_klient, &tab_klient_id[i]);
  42.   }
  43.   for(i=0;i<l_kl;i++){
  44.     pthread_join( tab_klient[i], NULL);
  45.   }
  46.   printf("\nZamykamy pub!\n");
  47.  
  48.  
  49. }
  50.  
  51.  
  52. void * watek_klient (void * arg_wsk){
  53.  
  54.   int moj_id = * ((int *)arg_wsk);
  55.  
  56.   int i, j, kufel, result;
  57.   int ile_musze_wypic = 2;
  58.  
  59.   printf("\nKlient %d, wchodzę do pubu\n", moj_id);
  60.    
  61.   for(i=0; i<ile_musze_wypic; i++){
  62.  
  63.     printf("\nKlient %d, wybieram kufel\n", moj_id);
  64.     int i=0;
  65.     while(true)
  66.     {
  67.         if(i>=l_kf)i=0;
  68.         if(!pthread_mutex_lock(&mutex_tab[i])) {kufel = i; break;}
  69.        
  70.     }      
  71.     j=0;
  72.     printf("\nKlient %d, nalewam z kranu %d\n", moj_id, j);
  73.     usleep(300);
  74.    
  75.     printf("\nKlient %d, pije\n", moj_id);
  76.     nanosleep((struct timespec[]){{0, 500000000L}}, NULL);
  77.    
  78.     printf("\nKlient %d, odkladam kufel\n", moj_id);
  79.     pthread_mutex_unlock(&mutex_tab[kufel]);
  80.    
  81.   }
  82.  
  83.   printf("\nKlient %d, wychodzę z pubu\n", moj_id);
  84.    
  85.   return(NULL);
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement