执行结果
  条件变量与互斥量一起使用时,允许线程以无竞争的方式等待特定的条件发生。
  下面程序中,由于在互斥量中等待条件会造成死锁
#include <pthread.h>
#include <stdio.h>
#include <signal.h>
pthread_t t1,t2;
pthread_mutex_t m1,m2;
pthread_cond_t c;
void *r1(void *d)
{
while(1)
{
pthread_mutex_lock(&m1);
printf("wait ");
pthread_cond_wait(&c,&m2);
pthread_mutex_unlock(&m1);
}
}
void *r2(void *d)
{
while(1)
{
pthread_mutex_lock(&m1);
printf("signal ");
pthread_cond_signal(&c);
pthread_mutex_unlock(&m1);
}
}
main()
{
pthread_cond_init(&c,0);
pthread_mutex_init(&m1,0);
pthread_mutex_init(&m2,0);
pthread_create(&t1,0,r1,0);
pthread_create(&t2,0,r2,0);
while(1);
/*
pthread_join(t1,0);
pthread_join(t2,0);
pthread_mutex_destroy(&m2);
pthread_mutex_destroy(&m1);
pthread_cond_destroy(&c);*/
}
  执行结果,程序执行到某一时刻发生死锁,不再向下执行
  改进后的程序,允许线程以无竞争的方式等待,不会发生死锁
#include <pthread.h>
#include <stdio.h>
#include <signal.h>
pthread_t t1,t2;
pthread_mutex_t m1,m2;
pthread_cond_t c;
void *r1(void *d)
{
while(1)
{
pthread_mutex_lock(&m1);
printf("wait ");
pthread_cond_wait(&c,&m1);
pthread_mutex_unlock(&m1);
}
}
void *r2(void *d)
{
while(1)
{
pthread_mutex_lock(&m1);
printf("signal ");
pthread_cond_signal(&c);
pthread_mutex_unlock(&m1);
}
}
main()
{
pthread_cond_init(&c,0);
pthread_mutex_init(&m1,0);
pthread_mutex_init(&m2,0);
pthread_create(&t1,0,r1,0);
pthread_create(&t2,0,r2,0);
while(1);
/*
pthread_join(t1,0);
pthread_join(t2,0);
pthread_mutex_destroy(&m2);
pthread_mutex_destroy(&m1);
pthread_cond_destroy(&c);*/
}