I don't get it why my threads can't perform properly for writer/reader problem.
I think something with the semaphore. but can't solve and online can't help me too.
semaphore mutex, read, write;
void *reader(void *argv)
{
char buffer[200];
int readNo, i=0;
do
{
sem_wait(&read);
sem_wait(&mutex);
sem_getvalue(&read, &readNo);
fgets(buffer, sizeof(buffer), argv); //read line by line from file
CirBuf[i] = init(CirBuf[i], strlen(buffer));
print_buff();
CirBuf[i] = buffer;
i++;
if(i == 15) i = 0;
sem_post(&mutex);
sem_post(&write);
}while(readNo > 0);
sem_post(&write);
pthread_exit(NULL);
}
void *writer(void *argv)
{
int i= 1;
do
{
sem_wait(&write);
sem_wait(&mutex);
sem_getvalue(&write, &i);
printf("arrive here\n");
if(CirBuf[i] != NULL)
{
fputs(CirBuf[i], argv); // write to the file;
CurBuf[i] = '\0';
}
sem_post(&mutex);
sem_post(&read);
}while(i > 0);
pthread_exit(NULL);
}