Hi All,
I am new to thread programing. In below code snippet inside producer thread if return NULL statement is removed i observed programme is hanging. Usually after execution of pthread_cond_signal(&cond); i believe i am out of this thread and consumer thread already have taken proper exit after execution of statement ** if(item==0) return NULL**. Can anybody through some light on this as i am getting desire output but programme is hangning and only return NULL statement in prodcuer thread is the soultion.
#include <pthread.h>
#include <stdio.h>
pthread_mutex_t mutex;
pthread_cond_t cond;
int buffer[100];
int loops = 5;
int length = 0;
void *producer(void *arg) {
int i=0;
for (;;)
{
pthread_mutex_lock(&mutex);
if(i==5) //Max_buffer 5
{
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
return NULL;// if this stament is removed then programme will hang.
}
else
{
buffer[length++] = i++;
printf("producer length %d\n", length);
pthread_mutex_unlock(&mutex);
}
}
}
void *consumer(void *arg) {
int i=0;
for (;;) {
pthread_mutex_lock(&mutex);
if(length == 0) {
printf(" consumer waiting...\n");
pthread_cond_wait(&cond, &mutex);
}
int item = buffer[--length];
printf("Consumer %d\n", item);
pthread_mutex_unlock(&mutex);
if(item==0) return NULL;
}
}
int main(int argc, char *argv[])
{
pthread_mutex_init(&mutex, 0);
pthread_cond_init(&cond, 0);
pthread_t pThread, cThread;
pthread_create(&cThread, 0, consumer, 0);
pthread_create(&pThread, 0, producer, 0);
pthread_join(cThread, NULL);
pthread_join(pThread, NULL);
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
return 0;
}