#include<stdlib.h>
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
const int ilosc_litrow_do_wypicia=4;
const int ilosc_kufli=1;
const int ilosc_klijentow=2;
const int maksymalny_czas_picia=5;
int * kufle;
int ilosc_wolnych_kufli=ilosc_kufli;
pthread_mutex_t sekcja_krytyczna=PTHREAD_MUTEX_INITIALIZER;
void* picie_piwa(void* arg){
int numer_klijenta=(int) arg;
int kufel=0;
int ilosc_wypitego_piwa=0;
int czas_picia=0;
printf("Klijent numer %d wchodzi do barun",numer_klijenta);
while(2>1){
while(kufel==0){
pthread_mutex_lock(& sekcja_krytyczna);
if(ilosc_kufli>0){
for(int i=0;i<ilosc_kufli;i++){
if(kufle[i]!=0){
kufel=kufle[i];
kufle[i]=0;
ilosc_wolnych_kufli--;
printf("Klijent numer %d zabrał piwo w kuflu o numerze %dn",numer_klijenta,kufel);
break;
}
}
}
pthread_mutex_unlock(& sekcja_krytyczna);
}
czas_picia=(rand()%maksymalny_czas_picia)+1;
sleep(czas_picia);
ilosc_wypitego_piwa++;
pthread_mutex_lock(&sekcja_krytyczna);
kufle[kufel-1]=kufel;
ilosc_wolnych_kufli++;
printf("Klijent numer %d oddał kufel numer %d po czasie %d, wypiłem już %d litrów piwan",numer_klijenta,kufel,czas_picia,ilosc_wypitego_piwa);
kufel=0;
pthread_mutex_unlock(&sekcja_krytyczna);
if(ilosc_wypitego_piwa==ilosc_litrow_do_wypicia){
break;
}
}
printf("Klijent numer %d zakończył picie na dziśn",numer_klijenta);
return (NULL);
}
int main(){
printf("Hellon");
kufle = malloc(sizeof(int)*ilosc_kufli);
for (int i=1;i<=ilosc_kufli;i++){
kufle[i-1]=i;
}
pthread_t klijeci[ilosc_klijentow];
for (int i=0;i<ilosc_klijentow;i++){
pthread_create(&klijeci[i], NULL, picie_piwa, (void*)(i+1));
}
for (int i=0;i<ilosc_klijentow;i++){
pthread_join(klijeci[i],NULL);
}
return 0;
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}