目录
题目:要求创建三个线程,顺序打印A、B、C
函数代码:
#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
#include<pthread.h>
#include<string.h>
int flag=0;
//创建条件变量
pthread_cond_t cond;
//创建互斥锁
pthread_mutex_t mutex1;
pthread_mutex_t mutex2;
pthread_mutex_t mutex3;
void *callBack1(void *arg)
{
while(1)
{
pthread_mutex_lock(&mutex1); //上锁
if(flag != 0)
{
pthread_cond_wait(&cond,&mutex1); //进入休眠
}
//
printf("A\n");
//
flag=1;
sleep(1);
pthread_cond_signal(&cond); //唤醒cond变量
pthread_mutex_unlock(&mutex1); //解锁
}
pthread_exit(NULL);
}
void *callBack2(void *arg)
{
while(1)
{
pthread_mutex_lock(&mutex2);
if(flag != 1)
{
pthread_cond_wait(&cond,&mutex2);
}
//
printf("C\n");
//
flag=2;
sleep(1);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex2);
}
pthread_exit(NULL);
}
void *callBack3(void *arg)
{
while(1)
{
pthread_mutex_lock(&mutex3);
if(flag != 2)
{
pthread_cond_wait(&cond,&mutex3);
}
//
printf("B\n");
//
flag=0;
sleep(1);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex3);
}
}
int main(int argc, const char *argv[])
{
if(pthread_cond_init(&cond,NULL) != 0)
{
perror("pthread_cond_init");
return -1;
}
printf("条件变量创建成功\n");
pthread_t tid1,tid2,tid3;
if(pthread_create(&tid1,NULL,callBack1,NULL) != 0)
{
perror("pthread_create");
return -1;
}
if(pthread_create(&tid2,NULL,callBack2,NULL) != 0)
{
perror("pthread_create");
return -1;
}
if(pthread_create(&tid3,NULL,callBack3,NULL) != 0)
{
perror("pthread_create");
return -1;
}
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_join(tid3,NULL);
//销毁互斥锁
pthread_mutex_destroy(&mutex1);
pthread_mutex_destroy(&mutex2);
pthread_mutex_destroy(&mutex3);
//销毁条件变量
pthread_cond_destroy(&cond);
return 0;
}
执行结果: