代码:
#include <stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#include<pthread.h>
//定义一个条件变量
int flag=0;
pthread_cond_t cond1=PTHREAD_COND_INITIALIZER;
pthread_cond_t cond2=PTHREAD_COND_INITIALIZER;
pthread_cond_t cond3=PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
//线程A执行体
void* callbacka(void* arg)
{
while(1)
{
pthread_mutex_lock(&mutex); //上锁
if(flag!=0)
{
pthread_cond_wait(&cond1,&mutex);
}
fprintf(stderr,"%c",'A');
flag=1;
pthread_cond_signal(&cond2);
pthread_mutex_unlock(&mutex); //解锁
}
pthread_exit(NULL);
}
//线程B执行体
void* callbackb(void* arc)
{
while(1)
{
pthread_mutex_lock(&mutex);
if(flag!=1)
{
pthread_cond_wait(&cond2,&mutex);
}
fprintf(stderr,"%c",'B');
flag=2;
pthread_cond_signal(&cond3);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
//线程C执行体
void* callbackc(void* agv)
{
while(1)
{
pthread_mutex_lock(&mutex);
if(flag!=2)
{
pthread_cond_wait(&cond3,&mutex);
}
fprintf(stderr,"%c\n",'C');
flag=0;
pthread_cond_signal(&cond1);
pthread_mutex_unlock(&mutex);
}
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
pthread_t a;
pthread_t b;
pthread_t c;
//创建线程A
pthread_create(&a,NULL,callbacka,NULL);
//创建线程B
pthread_create(&b,NULL,callbackb,NULL);
//创建线程C
pthread_create(&c,NULL,callbackc,NULL);
//阻塞等待ABC线程
pthread_join(a,NULL);
pthread_join(b,NULL);
pthread_join(c,NULL);
return 0;
}
效果:
