条件量练习

/*********************************************************************************
*
* 设计程序,创建三个线程,任务1条件满足时解除任务二的挂起状态,任务3用于控制x的值
* author:jindouliu2024@163.com 
* date:2025.5.12
* 
*
* Copyright (c)  2024-2025   jindouliu2024@163.com   All right Reserved
********************************************************************************/
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
pthread_t task1_id;
pthread_t task2_id;
pthread_t task3_id;
pthread_t main_id;
int x = 10,y = 20;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t  cond = PTHREAD_COND_INITIALIZER;
void * task1(void *arg)
{
	
	while(1){
		//上锁
		 pthread_mutex_lock(&mutex);
		//如果不满足,则一直阻塞等待
		while(x <= y){
			printf("running1\n");
		 	pthread_cond_wait(&cond,&mutex);
		}
		//如果满足,则通知唤醒
		pthread_cond_broadcast(&cond);

		//解锁
		pthread_mutex_unlock(&mutex);
		

	}
	pthread_exit(NULL);
}

void * task2(void *arg)
{
	
	while(1){
		//上锁
		 pthread_mutex_lock(&mutex);
		 printf("running2\n");
		//如果不满足,则一直阻塞等待
		if(x > y){
			printf("条件满足\n");
		 	pthread_cond_broadcast(&cond);
		}
		//解锁
		pthread_mutex_unlock(&mutex);
		sleep(1);
	}
	pthread_exit(NULL);
}
void * task3(void *arg)
{
	
	while(1){
		//上锁
		pthread_mutex_lock(&mutex);
		if(x > y){
			y += 10;
		}
		x += 2;
		printf("running3\n");
		
		//解锁
		pthread_mutex_unlock(&mutex);
		sleep(1);

	}
	pthread_exit(NULL);
}
int main()
{
	//初始化条件变量
	pthread_cond_init(&cond,NULL);
	//初始化互斥锁
	pthread_mutex_init(&mutex,NULL);
	//设置主线程为可分离属性
	pthread_detach(pthread_self());
	//pthread_t task1_id,task2_id,main_id;
	//定义线程属性对象
	pthread_attr_t thread_arr;
	//初始化线程属性对象
	pthread_attr_init(&thread_arr);
	//设置线程属性
	pthread_attr_setdetachstate(&thread_arr,PTHREAD_CREATE_DETACHED);
	//使用线程属性创建线程
	pthread_create(&task1_id,&thread_arr,task1,NULL);
	pthread_create(&task2_id,&thread_arr,task2,NULL);
	pthread_create(&task3_id,&thread_arr,task3,NULL);
	//主线程退出
	pthread_exit(NULL);
	return 0;
}

来源链接:https://www.cnblogs.com/lradian/p/18872285

© 版权声明
THE END
支持一下吧
点赞5 分享
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码快捷回复

    暂无评论内容