首页 > 其他分享 >熟悉条件量和互斥量的结合使用

熟悉条件量和互斥量的结合使用

时间:2024-05-31 21:23:27浏览次数:24  
标签:inputval 互斥 flag 结合 线程 熟悉 pthread include

/*************************************************
 *
 *   file name:1.c
 *   author   :[email protected]
 *   date     :2024/05/31
 *   brief    :作业:设计一个程序,主线程需要创建2个子线程之后主线程终止,
 *             此时进程中有2个子线程A和 B,此时进程中有一个临界资源 flag,
 *             子线程A获取触摸屏坐标并判断坐标值是否在LCD屏的左上角,
 *             如果坐标范围满足左上角,则利用条件量和互斥锁来唤醒子线程B,
 *             子线程B的任务是判断fag 是否大于 0,如果子线程B的条件满足,
 *             则让子线程B在终端输出一个字符串即可。要求进程中使用条件量和
 *             互斥锁实现线程的同步以及临界资源的互斥访问
 *   note     :此代码中满足左上角的坐标范围使用输入字符满足'0'-'9'来代替
 *
 *   CopyRight (c) 2024    [email protected]    All Right Reseverd
 *
 **************************************************/
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>

int flag = 0;                                          // 标志位变量
pthread_mutex_t fastmutex = PTHREAD_MUTEX_INITIALIZER; // 初始化互斥锁
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;        // 初始化条件量

// 创建子线程A的线程任务
void *threadA_task(void *argc)
{
    char inputval;
    while (1)
    {
        // 获取终端输入的值
        printf("Please input a char:\n");
        scanf(" %c", &inputval);

        // 先用互斥锁锁住flag
        pthread_mutex_lock(&fastmutex);

        // 判断输入的字符是否在字符'0'-'9'之间,满足条件则唤醒B
        if (inputval >= '0' && inputval <= '9')
        {
            // 满足条件则唤醒子线程B
            flag = 1;
            pthread_cond_signal(&cond);
        }

        // 解锁flag的互斥锁
        pthread_mutex_unlock(&fastmutex);

        sleep(2);
    }
}

// 创建子线程B的线程任务
void *threadB_task(void *argc)
{
    while (1)
    {
        // 先用互斥锁锁住flag
        pthread_mutex_lock(&fastmutex);

        // 判断flag是否大于0
        if (flag <= 0) // 不满足条件则挂起
        {
            pthread_cond_wait(&cond, &fastmutex);
        }
        printf("The value of flag is more than zero!\n");
        flag = 0;
        // 解锁flag的互斥锁
        pthread_mutex_unlock(&fastmutex);

        sleep(1);
    }
}

int main(int argc, char const *argv[])
{
    // 主线程创建2个子线程之后主线程终止
    pthread_t thread_A;
    pthread_t thread_B;

    pthread_create(&thread_A, NULL, threadA_task, NULL);
    pthread_create(&thread_B, NULL, threadB_task, NULL);

    // 初始化条件量、互斥锁
    pthread_cond_init(&cond, NULL);
    pthread_mutex_init(&fastmutex, NULL);

    pthread_exit(NULL);

    return 0;
}

标签:inputval,互斥,flag,结合,线程,熟悉,pthread,include
From: https://www.cnblogs.com/bell-c/p/18225294

相关文章

  • 同步互斥——进程篇(一)信号量
    信号量(Semaphores)信号量是一种用于进程间或线程间同步的机制。它可以限制多个进程或线程对共享资源的并发访问,确保资源被安全使用。信号量的核心思想是通过计数来控制访问,计数值表示当前可以访问资源的可用数量。计数器:信号量的核心是一个整数计数器。当计数器大于0时,表......
  • 系统编程练习题----利用条件量和互斥锁,实现两个线程之间的同步与互斥
    目录题目解析代码结果展示题目解析​ 该题主要依靠条件量和互斥锁来实现线程之间的同步与互斥,分析主线程、线程A和线程B的任务如下:主线程:打开LCD屏和触摸屏的硬件文件,并分别存储两个文件的文件描述符,方便后面进行条件判断。开启线程A和线程B。定义并初始化条件量和互斥......
  • 使用条件量和互斥锁实现线程的同步以及临界资源的互斥访问
    /********************************************************************** name :* function:主线程需要创建2个子线程之后主线程终止,此时进程中有2个子线程A和B,此时进程中有一个临界资源fag,子线程A获取触摸屏坐标并判断坐标值是否在LCD屏的左上角,如果坐标范围满足......
  • 进程控制(互斥锁)
    进程控制(互斥锁)目录进程控制(互斥锁)头文件全局变量234验证头文件/********************************************************************** name :* function:主线程需要创建2个子线程之后主线程终止,此时进程中有2个子线程A和B,此时进程中有一个临界资源fag,子线程......
  • 通过互斥锁+条件量的方式实现同步与互斥
    #include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<semaphore.h>#include<unistd.h>#include<string.h>#include<fcntl.h>//forO_CREATandO_EXCL#include<sys/ipc.h>#include<sys/s......
  • 【故障识别】基于CNN-SVM卷积神经网络结合支持向量机的数据分类预测研究(Matlab代码实
    ......
  • 互斥锁练习题
    练习:设计一个程序,程序中有3个线程,主线程A创建一个文本,每隔5s获取一次系统时间并写入到该文本中,另外两个线程B和C分别从文本中读取当前的时间和日期,子线程B输出系统时间"hh:mm:ss",子线程c输出系统日期"2024年05月31日”,要求使用读写锁实现互斥。提示:主线程A获取写操作的锁,另外......
  • uniapp微信小程序使用瀑布流结合z-panging组件显示pexels的图片
    最终效果如下:  瀑布流组件用的:https://ext.dcloud.net.cn/plugin?id=7594下拉刷新组件用的:https://z-paging.zxlee.cn这两个搭配起来省了很多事z-paging中组合custom-waterfalls-flow,可下拉刷新、到底自动加载下一页。下拉刷新效果: 到底自动加载下一页效果: ......
  • 关于github的全方位使用和与个人小组项目结合
    一,引言今天给大家介绍的是一款源代码管理工具网站Github,Github是一个基于版本控制软件Git打造的网站对于个人而言,Github提供了丰富的代码托管和版本控制功能,方便开发者管理自己的项目和代码,个人也可以在网站上搜索自己所需要的开源项目或者代码片段,同时也可以在网站上向朋友或......
  • 基于 MATLAB 的麻雀算法 (SSA) 优化注意力机制卷积神经网络结合门控循环单元 (SSA-Att
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)基于MATLAB的麻雀算法(SSA)优化注意力机制卷积神经网络结合门控循环单元......