Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdlib.h>
- #include<stdio.h>
- #include<pthread.h>
- #define W 2 // kazdy klient 2 piwa
- #define N 3 //ilosc kufli
- #define K 3 //ilosc klientow
- #define CZAS_NALEWANIA 3
- #define CZAS_PICIA 5
- typedef struct Pub
- {
- int ilKufli;
- pthread_t klienci[K];
- } Pub;
- pthread_mutex_t kufleMutex = PTHREAD_MUTEX_INITIALIZER;
- pthread_mutex_t barmanMutex = PTHREAD_MUTEX_INITIALIZER;
- void * wejdzIPij (void * nr);
- void napelnijKufel();
- Pub pub;
- main()
- {
- pub.ilKufli=N;
- int i;
- int numeryKlientow[K];
- for(i=0 ; i<K ; ++i)
- {
- numeryKlientow[i] = i+1;
- pthread_create(&pub.klienci[i], NULL, wejdzIPij, (void*)&numeryKlientow[i]);
- }
- for(i=0; i<K; i++){
- pthread_join(pub.klienci[i], NULL);
- }
- return 0;
- }
- void napelnijKufel(){
- pthread_mutex_lock(&barmanMutex);
- while(pub.ilKufli==0) {};
- int tmp = --pub.ilKufli;
- sleep(CZAS_NALEWANIA);
- printf("BARMAN napelnij kufel!");
- pthread_mutex_unlock(&barmanMutex);
- }
- void* wejdzIPij (void* nrKlienta)
- {
- int nr = *(int*) nrKlienta;
- printf("Witamy klienta nr %d\n", nr);
- int i, tmp;
- for(i = 0 ; i < W ; ++i)
- {
- napelnijKufel();
- printf("KLIENT %d\tpije %d piwo\n", nr, i+1);
- sleep(CZAS_PICIA);
- pthread_mutex_lock(&kufleMutex);
- // tmp = ++pub.ilKufli;
- printf("KLIENT %d wypil %d kufel.", nr, i+1);
- pthread_mutex_unlock(&kufleMutex);
- }
- printf("Pub opuszcza klient nr %d\n", nr);
- }
Advertisement
Add Comment
Please, Sign In to add comment