#include<stdio.h>
#include<sys/stat.h>
#include<errno.h>
#include<stdlib.h>
#include<dirent.h>
#include<stdarg.h>
#include<limits.h>
#include<string.h>
#include<time.h>
#include<pthread.h>
#include<stdint.h>
#include<unistd.h>
#define CAPMAX 4
int var1=0;
int var2=0;
int a=0;
pthread_mutex_t mtx;
pthread_cond_t enter_tourist;
pthread_cond_t exit_tourist;
void Pthread_mutex_lock(pthread_mutex_t *mtx){
}
void Pthread_mutex_unlock(pthread_mutex_t *mtx){
}
void *bus(void *arg){
int id = (intptr_t)arg;
while(1){
Pthread_mutex_lock(&mtx);
var1=1;
printf("[BUS]BUS IS LEAVING \n");
printf("[BUS]CURRENT STOP : STATION\n");
printf("[BUS]TOURISTS CAN GO UP \n");
Pthread_mutex_lock(&mtx);
pthread_cond_wait(&enter_tourist,&mtx);
sleep(2);
printf("[BUS]CURRENT STOP BUS : STORIC CENTRE\n");
printf("[BUS]TURISTS CAN GET OFF\n");
printf("[BUS]BUS IS RESTARTING\n");
var1=2;
pthread_cond_wait(&exit_tourist,&mtx);
Pthread_mutex_unlock(&mtx);
}
pthread_exit(NULL);
return NULL;
}
void *tourist(void *arg){
int id=(intptr_t)arg;
while (1){
sleep(2);
Pthread_mutex_lock(&mtx);
if (var1==1){
if(var2<4){
pthread_cond_signal(&enter_tourist);
var2++;
printf("[TOURSIST %d] ENTER IN THE BUS\n",id);
}
}
else if(var1==2) {
if(var2==4){
pthread_cond_signal(&exit_tourist);
var2--;
printf("[TOURIST %d] GETS OFF THE BUS \n",id);
}
}
Pthread_mutex_unlock(&mtx);
}
sleep(2);
pthread_exit(NULL);
return NULL;
}
int main(void){
pthread_t threads;
pthread_mutex_init(&mtx,NULL);
pthread_mutex_init(&mtx,NULL);
pthread_cond_init(&enter_tourist,NULL);
pthread_cond_init(&exit_tourist,NULL);
int number_turists=5,i=0;
for(;i<number_turists;i++){
pthread_create(&threads,NULL,tourist,(void *)(intptr_t)i);
}
pthread_create(&threads,NULL,bus,(void *)(intptr_t)0);
pthread_exit(NULL);
return 0;
}