Advertisement
Guest User

dkwa'fe

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