




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统(生产者与消费者问题)精品文档实验二 进程的互斥与同步(生产者与消费者问题)一、 实验目的: 利用 Windows提供的 API 函数,编写程序,解决生产者与消 费者问题,实现进程的互斥与同步。二、 实验内容与步骤: 本实验要求设计并实现一个进程,该进程拥有一个生 产者线程和一个消费者线程,它们使用 N 个不同的缓冲区( N为一个确定的 数值,例如 N=32)。生产者生产产品,将产品放入缓冲区,如果缓冲区满 了,就不能生产产品了,等到缓冲区有空了再生产,消费者线程消费产品, 从缓冲区取出产品消费,如果缓冲区是空的,就不能消费,线程挂起,生产 者与消费者不能同时对缓冲区操作。需要使用如下
2、信号量: 一个互斥信号量,用以阻止生产者线程和消费者线程同时操作缓冲区列表; 一个信号量,当生产者线程生产出一个物品时可以用它向消费者线程发 出信号; 一个信号量,消费者线程释放出一个空缓冲区时可以用它向生产者线程 发出信号;编写一段程序,模拟生产者和消费者线程,实现进程的互斥与同步。利用 VC+6.0 实现上述程序设计和调试操作,对于生产者和消费者线程操 作的成功与提供一定的提示框。 通过阅读和分析实验程序,熟悉进程的互斥与同步的概念。实验代码:#include#include using namespace std;const unsigned short N=5;/ 定义缓冲区的大小 H
3、ANDLE m_S_Empty; / 生产者 SemaphoreHANDLE m_S_Full; / 消费者 SemaphoreHANDLE m_M_Mutex;/互斥int bufferN; /定义共享缓冲区unsigned short ProductID = 0; /产品号unsigned short ConsumeID = 0; /将被消耗的产品号unsigned short in = 0; /产品进缓冲区时的缓冲区下标unsigned short out = 0; /产品出缓冲区时的缓冲区下标bool flag = true; /控制程序结束DWORD WINAPI Producer(
4、LPVOID); / 生产者线程 DWORD WINAPI Consumer(LPVOID); / 消费者线程初始计数为 Nint main()m_S_Empty = CreateSemaphore(NULL, N, N, NULL); /收集于网络,如有侵权请联系管理员删除精品文档初始计数为 0创建生产者线程创建消费者线程m_S_Full = CreateSemaphore(NULL, 0, N, NULL);/ m_M_Mutex = CreateMutex(NULL,FALSE,NULL); CreateThread(NULL,0,Producer,NULL,0,NULL);/ Crea
5、teThread(NULL,0,Consumer,NULL,0,NULL);/ while(flag)if(getchar() / 按回车后终止程序运行flag = false;return 0;void Produce()cout 产品生产中 +ProductID . ;cout 生产成功 endl;void Consume()cout 产品消费中 ConsumeID . ;cout 消费成功 endl;void Append()cout 放入一个产品 . ;bufferin = ProductID;in = (in+1)%N;cout 放入成功 endl;/ 输出缓冲区当前的状态for (
6、int i=0;iN;i+)std:couti: bufferi;if(i=in) cout -生产 ;if(i=out) cout -消费 ;coutendl;void Take()cout 取出一个产品 . ;ConsumeID = bufferout;out = (out+1)%N;cout 取出成功 endl;/ 输出缓冲区当前的状态for (int i=0;iN;i+)couti: bufferi;收集于网络,如有侵权请联系管理员删除精品文档生产 ;消费 ;if(i=in) cout -if(i=out) cout -coutendl;DWORD WINAPI Producer(LP
7、VOID) while(flag)if(WaitForSingleObject(m_S_Empty,INFINITE)=WAIT_OBJECT_0) if(WaitForSingleObject(m_M_Mutex,INFINITE)=WAIT_OBJECT_0)Produce();/ 生产一个物品Append();/ 将所生产的物品放到指定的缓冲区中Sleep(1500);ReleaseMutex(m_M_Mutex);ReleaseSemaphore(m_S_Full, 1, NULL);return 0;DWORD WINAPI Consumer(LPVOID) while(flag) if(WaitForSingleObject(m_S_Full,INFINITE)=WAIT_OBJECT_0)if(WaitForSingleObject(m_M_Mutex,INFINITE)=WAIT_OBJECT_0)Take();/ 取出一个物品Consume();/ 消费一个产品 Sleep(1500);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年房长助理职位招聘模拟题及答案解析
- 2025注册验船师资格考试(B级船舶检验法律法规)全真冲刺试题及答案一
- 2025年劳动法考试题库(附答案)
- 2025年行政事业单位内部控制能力提升考试题集及解答指南
- 2025年导游证考试高级模拟题及答案详解与攻略
- 公务员四川面试题及答案
- 公务员面试题型及答案
- 2025年建筑装饰工程师招聘面试题与经验
- 安徽省淮南市第二中学2026届化学高二第一学期期中质量跟踪监视模拟试题含解析
- 公务员励志面试题及答案
- QC新老七大工具培训课件
- DB43-T 2629-2023回转窑挥发富集次氧化锌技术规范地方标准
- 中铝矿业有限公司巩义市张家沟大发铝土矿矿山土地复垦与地质环境保护治理方案
- 班级管理常规优质课件
- IT运维服务方案信息运维服务方案
- ZSL1000、ZSL750塔吊外挂架施工方案
- 文化自信作文800字议论文
- GB/T 28287-2012足部防护鞋防滑性测试方法
- GB/T 27677-2017铝中间合金
- 芜湖宜盛置业发展有限公司招聘3名编外工作人员(必考题)模拟卷
- 混凝土结构设计原理教学教案
评论
0/150
提交评论