已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验课程:操作系统实验实验编号:实验名称:生产者消费者算法实验人员:年级专业学号姓名实验日期:上交日期:实 验 室:实验评价:实验成绩:评定日期:指导教师:一、目的和要求生产者消费者算法是操作系统中很重要的同步算法,通过本实验加深对互斥信号量和同步信号量的理解,掌握如何用信号量机制实现生产者消费者之间的同步算法。二、实验内容运用高级语言模拟实现生产者消费者算法,要求实现对缓冲池的互斥访问和生产者进程与消费者进程之间的同步,观察程序的运行情况并分析执行结果。三、实验环境1PC微机。2Windows 操作系统。3C/C+/VB开发集成环境。四、实验结果1. 程序源代码:生产者&消费者如下图:# include # include # include # include # include # include # include # include #define BUFFER_SIZE 5typedef int buffer_item;/semaphoressem_t empty, full, mutex;/bufferbuffer_item bufferBUFFER_SIZE;int in, out;/存储数据的结构体struct data int id; int opTime; int lastTime; int productId;/有限缓存插入-生产int insert_item(buffer_item item) /* insert item into buffer */ bufferout = item; out = (out + 1) % BUFFER_SIZE; return 0;/有限缓存删除-消费int remove_item(buffer_item *item) /* remove an object from buffer and then place it in item */ *item = bufferin; in = (in + 1) % BUFFER_SIZE; return 0; /生产者void *producer(void* param) int productId = (struct data*)param)-productId; int lastTime = (struct data*)param)-lastTime; int opTime = (struct data*)param)-opTime; int id = (struct data*)param)-id; free(param); sleep(opTime); sem_wait(&empty); sem_wait(&mutex); /* critical section */ /add a item insert_item(productId); sleep(lastTime); printf(Thread %d: Producer produce %dn, id, productId); sem_post(&mutex); sem_post(&full); pthread_exit(0);/消费者void *consumer(void* param) int lastTime = (struct data*)param)-lastTime; int opTime = (struct data*)param)-opTime; int id = (struct data*)param)-id; free(param); sleep(opTime); sem_wait(&full); sem_wait(&mutex); /* critical section */ /remove a item buffer_item item; remove_item(&item); sleep(lastTime); printf(Thread %d: Consumer consume %dn, id, item); sem_post(&mutex); sem_post(&empty); pthread_exit(0);int main() /pthread pthread_t tid; / the thread identifier pthread_attr_t attr; /set of thread attributes /* get the default attributes */ pthread_attr_init(&attr); /initial the semaphores sem_init(&mutex, 0, 1); sem_init(&empty, 0, BUFFER_SIZE); sem_init(&full, 0, 0); in = out = 0; int id = 0; while(scanf(%d, &id) != EOF) char role; /producer or consumer int opTime; /operating time int lastTime; /run time int productId; /product id scanf(%c%d%d, &role, &opTime, &lastTime); struct data* d = (struct data*)malloc(sizeof(struct data); d-id = id; d-opTime = opTime; d-lastTime = lastTime; if(role = P) scanf(%d, &productId); d-productId = productId; pthread_create(&tid, &attr, producer, d); else if(role = C) pthread_create(&tid, &attr, consumer, d); /释放信号量 sem_destroy(&mutex); sem_destroy(&empty); sem_destroy(&full); return 0;- 2实验报告。1(设计思路)&2(使用了几个信号量,每个信号量的作用)设置三个信号量:empty (以记录有多少空位)、full (以记录有多少满位)以及mutex (二进制信号量或互斥信号量,以保护对缓冲插入与删除的操作)当信号量empty为0的时候,此时有限缓存已满,生产者必须等待,当信号量full为0的时候,此时有限缓存为空,消费者无法进行消费,必须等待信号量mutex使得各个线程之间互斥,每次只允许一个线程进入临界区,一旦有线程进入自己的临界区,其余线程必须等待有限缓存区为循环队列,尾部插入新的产品,头部产品先被消耗(3)解决方法的整体流程:有多个进程:多个生产者进程和多个消费者进程共享一个初始为空、固定大小为n的缓存(缓冲区)。生产者的工作是制造
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑幕墙支撑钢结构创新创业项目商业计划书
- 2025年秋人教版小学数学六年级第一学期期末模拟测试卷及答案
- 增强现实购物体验APP创新创业项目商业计划书
- 人教版(2024)五年级全一册信息科技第10课 猜数游戏有捷径 教案
- 宜昌市体育中心场馆惠民开放:全民健身服务升级实践 -2026 届高三语文主题读写素材 11 月热点时事写作素材
- 2025年基因编辑技术在疾病治疗中的突破与伦理
- 2025年长春辅警招聘考试真题参考答案详解
- 2025年西双版纳州辅警协警招聘考试备考题库附答案详解(考试直接用)
- 2025年通辽辅警协警招聘考试备考题库含答案详解(培优b卷)
- 2025年阿克苏辅警协警招聘考试备考题库(含答案详解)
- 泳衣设计基础知识培训课件
- 2025至2030全球及中国宽带网络行业项目调研及市场前景预测评估报告
- 2025-2026学年沪科技版(五四制)二年级科学上册(全册)教学设计(附目录)
- 钢结构工程质量管理体系实施方案
- 装修安全生产培训讲解
- 十年(2016-2025)高考英语真题分类汇编:专题15 阅读理解议论文(全国)(解析版)
- 基于体验学习圈的小学图形化编程教学模式构建与应用研究
- 2025年青海省公务员考试真题
- 消防水泵房安全培训内容课件
- 心脏体格检查课件
- 大数据与人工智能导论(厦门大学)学习通网课章节测试答案
评论
0/150
提交评论