#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex;
pthread_cond_t g_cond;
void *func1(void *f)
{
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
pthread_mutex_lock(&mutex);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
pthread_cond_wait(&g_cond,&mutex);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
pthread_mutex_unlock(&mutex);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
return;
}
void *func2(void *f)
{
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
pthread_mutex_lock(&mutex);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
pthread_mutex_unlock(&mutex);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
pthread_cond_broadcast(&g_cond);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
return;
}
int main(int argc,char* argv[])
{
pthread_t pth1,pth2;
pthread_mutex_init(&mutex,NULL);
pthread_cond_init(&g_cond,NULL);
pthread_create(&pth1,NULL,func1,NULL);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
usleep(1000*1000*3);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
pthread_create(&pth2,NULL,func2,NULL);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
usleep(1000*1000*3);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
pthread_join(pth1,NULL);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
pthread_join(pth2,NULL);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
pthread_cond_destroy(&g_cond);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
pthread_mutex_destroy(&mutex);
printf("%s,%d,%d\n",__FUNCTION__,__LINE__);
return 0;
}