郗新语 发表于 2025-6-8 12:23:29

系统编程POSIX信号量题

系统编程

POSIX信号量

题目

设计一个程序,主线程需要创建2个子线程之后主线程终止,此时进程中有2个子线程A和B,此时进程中有一个临界资源flag,子线程A获取触摸屏坐标并判断坐标值是否在LCD屏的左上角,如果坐标范围满足左上角,则利用条件量和互斥锁来唤醒子线程B,子线程B的任务是判断flag 是否大于0,如果子线程B的条件满足,则让子线程B在终端输出一个字符串即可。要求进程中使用条件量和互斥锁实现线程的同步以及临界资源的互斥访问。
代码

/*************************************************************************************        file name:        pthread_cond.c*        author       :cnzycwp@126.com *        date       :2024/05/31*        function :该案例是在进程中使用条件量和互斥锁实现线程的同步以及临界资源的互斥访问*         note       :*               由于使用了线程函数接口,所以编译时需要加上-pthread*   version:**        CopyRight (c)2023-2024   cnzycwp@126.com   All Right Reseverd ** **********************************************************************************//************************************头文件*****************************************/#include #include #include #include #include #include #include #include /***********************************************************************************//************************************全局变量***************************************/pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t cond = PTHREAD_COND_INITIALIZER;int lcd_fd;   //lcd屏文件int ts_fd;      //触摸屏文件int *lcd_mp;    //指向LCD屏映射空间地址的指针变量// 临界资源flag,应该使用volatile修饰,防止编译器优化volatile int x,y;volatile int flag = 0;/**********************************************************************************//*************************************************************************************        name       :        thread_A_func*        function :线程A的任务函数,获取触摸屏坐标并判断坐标值是否在LCD屏的左上角,*               如果坐标范围满足左上角,则利用条件量和互斥锁来唤醒子线程B*        param :*                                none*                                *        retval       :none*        author       :cnzycwp@126.com *        date       :2024/05/31*         note       :由于线程B处于挂起状态,所以需要在线程A中设定条件唤醒线程B进,防止*               死锁情况出现*   version:*         * *********************************************************************************/void *thread_A_func(void *arg){    //2.读取输入设备的信息        struct input_event ts_event;    int cnt = 0;                while(1)        {                read(ts_fd,&ts_event,sizeof(ts_event));                //3.分析读取的设备信息 (type + code + value)                if (ts_event.type == EV_ABS) //说明是触摸屏                {                        if (ts_event.code ==ABS_X) //说明是X轴                        {                                cnt++;                                x = ts_event.value * 800 / 1024;                        }                        if (ts_event.code ==ABS_Y) //说明是Y轴                        {                                cnt++;                                y = ts_event.value * 480 / 600;                        }                        if(cnt >= 2)                        {                cnt = 0;                printf("x = %d, y = %d\n",x,y);                // 用互斥锁上锁                pthread_mutex_lock(&mutex);                //判断坐标值是否在LCD屏左上角                if (x >= 0 && x = 0 && y

仁夹篇 发表于 2025-10-30 22:18:14

感谢分享

扎先 发表于 2025-11-21 04:34:59

感谢,下载保存了

秤陷曲 发表于 2025-12-23 01:32:55

这个有用。

梁丘眉 发表于 2026-1-15 13:07:33

谢谢楼主提供!

滑清怡 发表于 2026-1-24 12:21:18

yyds。多谢分享

杠氯 发表于 2026-1-25 09:16:59

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

骆贵 发表于 2026-1-26 07:01:44

这个好,看起来很实用

崔竹 发表于 2026-1-26 09:03:46

过来提前占个楼

缄戈 发表于 2026-1-27 07:01:54

谢谢分享,试用一下

茅香馨 发表于 2026-1-27 07:16:25

谢谢分享,辛苦了

钱匾 发表于 2026-1-30 04:49:41

yyds。多谢分享

师佳思 发表于 2026-1-30 12:16:13

过来提前占个楼

庾芷秋 发表于 2026-1-31 14:16:59

谢谢分享,辛苦了

博咱 发表于 2026-2-1 23:45:24

分享、互助 让互联网精神温暖你我

袋岖荤 发表于 2026-2-6 08:26:31

这个好,看起来很实用

钱艷芳 发表于 2026-2-6 09:01:57

用心讨论,共获提升!

任佳湍 发表于 2026-2-7 11:58:11

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

晾棋砷 发表于 2026-2-10 09:05:21

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

徙办 发表于 2026-2-12 07:09:42

这个有用。
页: [1] 2
查看完整版本: 系统编程POSIX信号量题