#include <stdio.h>
#include <pthread.h>
//#define
int gcount;
int thread_1();
int thread_2();
pthread_mutex_t count_mutex;
pthread_cond_t count_threshold_cv;
int main(int argc,char *argv[])
{
pthread_attr_t *attr;
pthread_t threadId[3];
pthread_mutex_init(&count_mutex, NULL);
pthread_cond_init (&count_threshold_cv, NULL);
printf("entering main \n");
pthread_create(&threadId[1],NULL,(void*)thread_1,NULL);
pthread_create(&threadId[2],NULL,(void*)thread_2,NULL);
while(1){
sleep(2);
};
return 0;
}
int thread_1()
{
printf("thread1 running \n");
while(1)
{
pthread_mutex_lock(&count_mutex);
while(gcount%2 == 0)
{
pthread_cond_wait(&count_threshold_cv,&count_mutex);
}
if(gcount %2 == 1)
{
printf("thread1: %d \n",gcount++);
pthread_cond_signal(&count_threshold_cv);
sleep(2);
}
pthread_mutex_unlock(&count_mutex);
// printf("thread1 : counter %d \n",gcount++);
}
return 1;
}
int thread_2()
{
printf("thread2 running \n");
while(1)
{
pthread_mutex_lock(&count_mutex);
while(gcount%2 == 1)
{
pthread_cond_wait(&count_threshold_cv,&count_mutex);
}
if(gcount%2 == 0)
{
printf("thread2: %d \n",gcount++);
pthread_cond_signal(&count_threshold_cv);
sleep(2);
}
pthread_mutex_unlock(&count_mutex);
}
return 1;
}