#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <semaphore.h>
#define Size 10
sem_t bucket,jar,full,empty,well;
void * littleMonkF(void * arg){
while (1) {
sem_wait(&bucket);
sem_wait(&empty);
sem_wait(&well);
printf("get water!");
sem_post(&well);
sem_wait(&jar);
printf("pull water");
sem_post(&jar);
sem_post(&full);
sem_post(&bucket);
}
}
void * oldMonkF(void *arg){
sem_wait(&full);
sem_wait(&bucket);
sem_wait(&jar);
printf("dirnk water");
sem_post(&jar);
sem_post(&bucket);
sem_post(&empty);
}
int main()
{
pthread_t little_Monk;
pthread_t old_Monk;
sem_init(&bucket,0,3);
sem_init(&jar,0,1);
sem_init(&full,0,0);
sem_init(&empty,0,10);
sem_init(&well,0,1);
pthread_create(&little_Monk,NULL,littleMonkF,NULL);
pthread_create(&old_Monk,NULL,oldMonkF,NULL);
pthread_join(&little_Monk,NULL);
pthread_join(&old_Monk,NULL);
printf("Hello World!\n");
return 0;
}