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>
- void * watek_klient (void * arg);
- pthread_mutex_t *mutex_tab;
- int *mutex_id;
- int l_kl, l_kf, l_kr, i;
- main(){
- pthread_t *tab_klient;
- int *tab_klient_id;
- printf("\nLiczba klientow: "); scanf("%d", &l_kl);
- printf("\nLiczba kufli: "); scanf("%d", &l_kf);
- mutex_tab= (pthread_mutex_t*) malloc(l_kf*sizeof(pthread_mutex_t);
- mutex_id= (mutex_id*) malloc(l_kf*sizeof(int));
- for(i=0;i<l_kf;i++) {mutex_id[i]=i; pthread_mutex_init(&mutex_tab[i],NULL) }
- //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", l_kf);
- 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 i, j, kufel, result;
- int ile_musze_wypic = 2;
- printf("\nKlient %d, wchodzę do pubu\n", moj_id);
- for(i=0; i<ile_musze_wypic; i++){
- printf("\nKlient %d, wybieram kufel\n", moj_id);
- int i=0;
- while(true)
- {
- if(i>=l_kf)i=0;
- if(!pthread_mutex_lock(&mutex_tab[i])) {kufel = i; break;}
- }
- j=0;
- printf("\nKlient %d, nalewam z kranu %d\n", moj_id, j);
- usleep(300);
- printf("\nKlient %d, pije\n", moj_id);
- nanosleep((struct timespec[]){{0, 500000000L}}, NULL);
- printf("\nKlient %d, odkladam kufel\n", moj_id);
- pthread_mutex_unlock(&mutex_tab[kufel]);
- }
- printf("\nKlient %d, wychodzę z pubu\n", moj_id);
- return(NULL);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement