Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdlib.h>
- #include<stdio.h>
- #include <time.h>
- #include<pthread.h>
- static pthread_mutex_t count_mutex;
- static int kufle;
- void * watek_klient (void * arg);
- main(){
- pthread_mutex_init (&count_mutex, NULL);
- pthread_t *tab_klient;
- int *tab_klient_id;
- int l_kl, l_kf, l_kr, i;
- printf("\nLiczba klientow: "); scanf("%d", &l_kl);
- printf("\nLiczba kufli: "); scanf("%d", &kufle);
- //printf("\nLiczba kranow: "); scanf("%d", &l_kr);
- l_kr = 1;
- tab_klient = (pthread_t *) malloc(l_kl*sizeof(pthread_t));
- tab_klient_id = (int *) malloc(l_kl*sizeof(int));
- for(i=0;i<l_kl;i++) tab_klient_id[i]=i;
- printf("\nOtwieramy pub (simple)!\n");
- printf("\nLiczba wolnych kufli %d\n", kufle);
- for(i=0;i<l_kl;i++){
- pthread_create(&tab_klient[i], NULL, watek_klient, &tab_klient_id[i]);
- }
- for(i=0;i<l_kl;i++){
- pthread_join( tab_klient[i], NULL);
- }
- printf("\nZamykamy pub!\n");
- }
- void * watek_klient (void * arg_wsk){
- int moj_id = * ((int *)arg_wsk);
- int can_continue = 1;
- int sukces;
- int i, j, result;
- int ile_musze_wypic = 2;
- printf("\nKlient %d, wchodzę do pubu\n", moj_id);
- for(i=0; i<ile_musze_wypic; i++){
- j=0;
- do{
- if ( kufle>0 )
- {
- printf("\nKlient %d, wybieram kufel nr %d \n", moj_id, kufle);
- pthread_mutex_lock(&count_mutex);
- kufle--;
- pthread_mutex_unlock(&count_mutex);
- printf("\nZostalo %d kufli\n", kufle);
- sukces = 1;
- printf("\nKlient %d, nalewam z kranu %d\n", moj_id, j);
- usleep(300);
- }
- if ( sukces == 0 )
- {
- //printf("\nKlient %d czeka na kufel \n", moj_id);
- usleep(300);
- }
- else
- {
- pthread_mutex_lock(&count_mutex);
- printf("\nKlient %d, pije\n", moj_id);
- nanosleep((struct timespec[]){{0, 500000000L}}, NULL);
- printf("\nKlient %d, odkladam kufel\n", moj_id);
- kufle++;
- pthread_mutex_unlock(&count_mutex);
- }
- } while ( sukces == 0 );
- }
- printf("\nKlient %d, wychodzę z pubu\n", moj_id);
- printf("\nWolne kufle %d \n", kufle);
- return(NULL);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement