LiteOS同步实验(实现生产者-消费者问题)

news2024/9/23 1:24:14

效果如下图:

给大家解释一下上述效果:在左侧(顶格)的是生产者(Producer);在右侧(空格)的是消费者(Consumer)。生产者有1个,代号为“0”;消费者有2个,代号分别为“0”和“1”。

生产者首先生产出一个产品,输出“is producing Product”。然后唤醒消费者来消费,输出“is waking Consumer”。

消费者生成时会报告自己的信息,比如“I am Consumer 0”代表它是0号消费者。如果有东西可以消费,它会输出“Consumer 代号 consume product success!!!!”代表消费成功。

程序实现的效果是:生产者不断生产“产品”,然后消费者“0”和“1”不断进行消费,如此循环往复。

代码非常简单,如下:

#include <stdlib.h>                                                      
#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include <pthread.h>

#define CONSUMER_NUM 2

#define PRODUCER_NUM 1

pthread_t pids[CONSUMER_NUM+PRODUCER_NUM];

int ready = 0;
int running =1;


pthread_mutex_t mutex;

pthread_cond_t has_product;

void* producer(void* arg){
    int no = (int)arg;
    while(running){
        pthread_mutex_lock(&mutex);
        ready++;
        printf("Producer %d is producing Product\n",no);
	fflush(stdout); 
        pthread_cond_signal(&has_product);
        printf("Producer %d is waking Consumer\n",no);
	fflush(stdout); 
        pthread_mutex_unlock(&mutex);
        sleep(1);
    }
return NULL;
}

void* consumer(void* arg){
    int num = (int)arg;
    while(running){
	pthread_mutex_lock(&mutex); 
        while(ready==0){
            printf("\tConsumer %d is waiting...\n",num);
	    fflush(stdout); 
            pthread_cond_wait(&has_product,&mutex);
        }
        ready--;
        printf("\tConsumer %d consume product success!!!!!\n",num);
	fflush(stdout); 
        pthread_mutex_unlock(&mutex);
        sleep(3);
    }
return NULL;
}

void HxSyscall(int num){                                          
    pthread_mutex_init(&mutex,NULL);
    pthread_cond_init(&has_product,NULL);
    printf("init success!\n");
    int i;
    int thread_ids[CONSUMER_NUM + PRODUCER_NUM]; 
 
    for(i=0; i<PRODUCER_NUM; i++){
        thread_ids[i] = i;
        pthread_create(&pids[i], NULL, producer, (void*)i);
    }
   
    for(i=0; i<CONSUMER_NUM; i++){
	printf("\tI am Consumer %d \n",i);
	fflush(stdout); 
	sleep(2);
        thread_ids[PRODUCER_NUM + i] = i;
        pthread_create(&pids[PRODUCER_NUM + i], NULL, consumer, (void*)i);
    }

    for(i=0; i<PRODUCER_NUM + CONSUMER_NUM; i++){
        pthread_join(pids[i], NULL);
    }

    pthread_mutex_destroy(&mutex);
    pthread_cond_destroy(&has_product);
    
    return;
}

大家只需要按照project1的方式,将上述代码放入home/openharmony/kernel/liteos_a/syscall下的hx_syscall.c文件夹下即可(这里为了方便基础较薄弱的同学操作,所以我们仍旧采用勖哥在pro1中的函数命名),接下来大家只需要按照pro1的方式进行编译烧录即可运行。

【如果觉得有帮助记得点赞+收藏​​​​​​⭐】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1237587.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

编译源码-【opencv3.4.16 + vs2013 x64】

编译机器&#xff1a;i5 13500HX RTX 4050 laptop win11 CMake 3.26.4 Configure&#xff0c;去掉勾选图中黄色标注的项&#xff0c;opencv_world 随意 Configure可能提示3rdparty下载timeout&#xff0c;它会下载到源码目录的.cache ├── .cache │ ├──ffmpeg │ │ …

[数据结构]—栈和队列

&#x1f493;作者简介&#x1f389;&#xff1a;在校大二迷茫大学生 &#x1f496;个人主页&#x1f389;&#xff1a;小李很执着 &#x1f497;系列专栏&#x1f389;&#xff1a;数据结构 每日分享✨&#xff1a;到头来&#xff0c;有意义的并不是结果&#xff0c;而是我们度…

基于Springboot的美容院管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的美容院管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&a…

「浙江科聪新品发布」新品发布潜伏顶升式移动机器人专用控制器

聚焦专用车型 最小专用控制器 控制器只占整机5%&#xff0c;纵向出线方式&#xff0c;占比更小 更易插拔 整体解决方案 更具价格优势 提供整体解决方案&#xff0c;配套各类型产品设备及车体厂家 打造持久稳定使用 坚持工业级品质 采用车规级接口&#xff0c;不用其它类不可…

ChatGPT 使用入门

背景 ChatGPT是一个强大的聊天机器人助手&#xff0c;内置了大量的互联网知识文档&#xff0c;且具有上下文记忆&#xff0c;可以帮我们快速地查找一些资料&#xff0c;了解一个知识&#xff0c;帮我们回答问题&#xff0c;编写代码等。此外&#xff0c;在使用ChatGPT时具有一…

论文笔记:Localizing Cell Towers fromCrowdsourced Measurements (intro 部分)

2015 1 Intro 1.1 motivation opensignal.com 、cellmapper.net 和 opencellid.org 都是提供天线&#xff08;antenna&#xff09;位置的网站 他们提供的天线位置相当准确&#xff0c;但至少在大多数情况下不完全正确这个目标难以实现的原因是蜂窝网络供应商没有义务提供有…

【Redis篇】简述Java中操作Redis的方法

文章目录 &#x1f384;简述Jedis&#x1f384;Jedis优点&#x1f354;使用Jedis连接Redis⭐进行测试&#x1f388;进行测试 Redis&#xff08;Remote Dictionary Server&#xff09;是一种流行的高性能内存数据库&#xff0c;广泛应用于各种应用程序和系统中。作为Java开发人员…

汇编-pop出栈指令

32位汇编 执行动作分为两步&#xff1a; 第一步&#xff1a;读出数据 第二步&#xff1a;改变栈地址 如果操作数是16位&#xff0c; 则ESP加2&#xff1b; 如果操作数是32位&#xff0c; 则ESP加4 espesp2 或 espesp4 格式&#xff1a;

如何开发干洗店用的小程序

洗护行业现在都开始往线上的方向发展了&#xff0c;越来越多的干洗店都推出了上门取送服务&#xff0c;那么就需要开发一个干洗店专用的小程序去作为用户和商家的桥梁&#xff0c;这样的小程序该如何开发呢&#xff1f; 一、功能设计&#xff1a;根据干洗店的业务需求和小程序的…

智能座舱架构与芯片 - (3) 硬件篇 上

一、介绍 在了解智能座舱的基本架构之后&#xff0c;我们有必要针对智能座舱域的硬件平台&#xff0c;软件平台&#xff0c;SOC等进行逐一介绍。从它们的整体结构中去认识最新的智能座舱组成部件&#xff0c;以及主要功能等。 如上图&#xff0c;是中央计算-区域控制架构下的智…

集成电路生产ERP都有哪些模块?企业如何选择适用的系统

集成电路的生产管理涵盖物料、配件、车间、图纸设计、工艺流转、出入库、退补料、品质检验、成本核算、班组产能评估等环节&#xff0c;而这些环节之间信息的实时和准确传递是管理的难点也是重点。 如何集成各类资源&#xff0c;优化相关业务流程&#xff0c;提高资源利用率&a…

2014年3月13日 Go生态洞察:并发模式与管道取消技术

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

创作一款表情包生成微信小程序:功能详解与用户体验优化

一、引言 在当今社交媒体充斥着各种趣味表情包的时代&#xff0c;表情包生成工具成为许多用户创作和分享创意的热门选择。为了迎合这一趋势&#xff0c;我设计并开发了一款功能丰富、用户友好的微信小程序&#xff0c;旨在让用户能够轻松而有趣地创作个性化的表情包。这篇博客将…

Java 环境其他下载2

1 Eclipse Temurin Latest Releases | Adoptium Eclipse Temurin 是由基于 OpenJDK 的开源 Java SE 产生的构建版本。Temurin 适用于 广泛的平台 以及诸多 Java SE 版本。以下列出了推荐用于生产的最新版本&#xff0c;并且定期由 Adoptium 社区发布更新和支持。迁移帮助、容器…

C语言杨辉三角(ZZULIOJ1130:杨辉三角)

题目描述 还记得中学时候学过的杨辉三角吗&#xff1f;具体的定义这里不再描述&#xff0c;你可以参考以下的图形&#xff1a;1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 输入&#xff1a;输入只包含一个正整数n&#xff08;1 < n < 30&#xff09;&#xff0c;表示将…

linux之 服务器ping百度能通,ping其他网址不通

表症问题 linux上ping域名解析出来的ip地址不正确 linux服务器ping百度能通&#xff0c;ping其他网址不通 linux上ping域名解析出来的ip地址不正确 ping 百度可以&#xff0c;说明dns解析是没问题的 但是&#xff0c;ping 其他网址不通&#xff0c;说明是 请求的其他网址的问…

【香橙派】实战记录1——简介及烧录 Linux 镜像

文章目录 一、简介1、参数2、结构3、其他配件4、下载资料 二、基于 Windows PC 将 Linux 镜像烧写到 TF 卡的方法1、使用 balenaEtcher 烧录 Linux 镜像的方法2、效果 一、简介 Orange Pi Zero 3 香橙派是一款开源的单板卡片电脑&#xff0c; 新一代的arm64开发板&#xff0c;…

Android使用Kotlin利用Gson解析多层嵌套Json数据

文章目录 1、依赖2、解析 1、依赖 build.gradle(app)中加入 dependencies { implementation com.google.code.gson:gson:2.8.9 }2、解析 假设这是要解析Json数据 var responseStr "{"code": 200,"message": "操作成功","data&quo…

“高校评分”走红网络,虎扑:若造谣抹黑,学校可联系平台处理

哎呀&#xff0c;最近虎扑APP的全国高校评分可是火遍了网络啊&#xff01;那些机智的评语&#xff0c;哦哟&#xff0c;都成了新的“网络爆款梗”&#xff01;有毕业生说嘛&#xff0c;这评分都是看学生自己的经历和感受&#xff0c;有好评当然就有差评啦。但关键是&#xff0c…

C语言经典好题:字符串左旋(详解)

这题还是比较简单的&#xff0c;各位看完有收获吗 #include<stdio.h> #include<string.h> void leftturn(char arr[],int k) {int len strlen(arr);for (int i 0;i <k;i)//左旋k个字符{//创建临时变量char tmp 0;tmp arr[0];//将数组第一个字符存储到临时变…