任静柔 发表于 2025-5-29 10:51:53

条件量练习

/*********************************************************************************
*
* 设计程序,创建三个线程,任务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_tcond = 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;
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

喳谍 发表于 2025-10-11 20:56:57

懂技术并乐意极积无私分享的人越来越少。珍惜

韦逸思 发表于 2025-11-6 10:30:48

yyds。多谢分享

劳暄美 发表于 2025-11-27 04:49:54

感谢分享,下载保存了,貌似很强大

处匈跑 发表于 2025-11-28 12:37:11

不错,里面软件多更新就更好了

全叶农 发表于 2025-12-6 06:43:04

不错,里面软件多更新就更好了

懵诬哇 发表于 2025-12-11 22:47:57

鼓励转贴优秀软件安全工具和文档!

赵淳美 发表于 2025-12-23 23:12:13

喜欢鼓捣这些软件,现在用得少,谢谢分享!

薯羞 发表于 2025-12-27 19:41:17

热心回复!

肿抢 发表于 2026-1-3 05:39:19

感谢发布原创作品,程序园因你更精彩

卒挪 发表于 2026-1-17 21:50:18

喜欢鼓捣这些软件,现在用得少,谢谢分享!

谭皎洁 发表于 2026-1-20 13:46:19

新版吗?好像是停更了吧。

申屠梓彤 发表于 2026-1-21 14:38:33

用心讨论,共获提升!

杠氯 发表于 2026-1-22 07:40:05

感谢,下载保存了

予捻 发表于 2026-1-28 17:30:04

喜欢鼓捣这些软件,现在用得少,谢谢分享!

柄利 发表于 2026-1-30 03:03:28

yyds。多谢分享

筒濂 发表于 2026-1-30 04:45:48

收藏一下   不知道什么时候能用到

旌磅箱 发表于 2026-2-4 08:56:58

喜欢鼓捣这些软件,现在用得少,谢谢分享!

汲佩杉 发表于 2026-2-8 01:23:26

收藏一下   不知道什么时候能用到

昆拗干 发表于 2026-2-8 03:25:16

感谢分享,学习下。
页: [1] 2
查看完整版本: 条件量练习