#include<iostream>
#include<pthread.h>
#include<semaphore.h>
#include<unistd.h>
#include<vector>
using namespace std;
int buff_size = 10,front = 0,rear = 0;
vector<int> buff(buff_size);
sem_t bin_sem,remain,cur;
void* proceducer(void* arg){
int i = 0;
do{
sem_wait(&remain);
sem_wait(&bin_sem);
cout<<"Proceducer: "<<rear<<endl;
rear = (rear+1)%buff_size;
i++;
sem_post(&bin_sem);
sem_post(&cur);
sleep(1);
}while(i<15);
return NULL;
}
void* consumer(void* arg){
int i=0;
do{
sem_wait(&cur);
sem_wait(&bin_sem);
cout<<"Consumer: "<<front<<endl;
front = (front+1)%buff_size;
i++;
sem_post(&bin_sem);
sem_post(&remain);
// sleep(1);
}while(i<15);
return NULL;
}
int main(){
pthread_t threads_ID[2];
void* exit_status;
sem_init(&bin_sem,0,1);
sem_init(&remain,0,buff_size);
sem_init(&cur,0,0);
pthread_create(&threads_ID[0],NULL,proceducer,NULL);
pthread_create(&threads_ID[1],NULL,consumer,NULL);
pthread_join(threads_ID[0],&exit_status);
pthread_join(threads_ID[1],&exit_status);
sem_destroy(&bin_sem);
sem_destroy(&remain);
sem_destroy(&cur);
return 0;
}