




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉纺织大学操作系统原理课程实验报告姓名:郑飞 班级:信管21001 学号:1014211078实验时间:2012年11月12日 指导教师:陈勇跃实验名称:PV操作实现原理及其在同步与互斥中的应用一、 实验目的1. 通过实验了解进程间同步与互斥实现方法;2. 熟悉PV操作实现原理及其在同步与互斥中的应用。二、 实验内容1. 调试下面的PV操作程序,描述其实现的基本过程。2. 了解进程的进程间同步与互斥的实现原理,熟悉PV操作的使用方法,并观察其实现结果。三、 操作步骤1. PV操作程序实例:/*pv操作*/ #include #include #include typedef HANDLE Semaphore; / 信号量的Windows原型 #define P(S) WaitForSingleObject(S, INFINITE) / 定义Windows下的P操作 #define V(S) ReleaseSemaphore(S, 1, NULL) / 定义Windows下的V操作 #define rate 1000 #define CONSUMER_NUM 10 /* 消费者个数 */ #define PRODUCER_NUM 10 /* 生产者个数 */ #define BUFFER_NUM 4 /* 缓冲区个数 */ char *thing10 = 牙膏, 毛巾, 方便面, 茶杯, 大米, 衣服, 鞋子, 电脑, 数码相机, 柜子; struct Buffer int productBUFFER_NUM; / 缓冲区 int start, end; / 两个指针 g_buf; Semaphore g_semBuffer, g_semProduct, g_mutex; /信号灯 DWORD WINAPI Consumer(LPVOID para) / 消费者线程 int i = *(int *)para; / i表示第i个消费者 int ptr; / 待消费的内容的指针 printf( 消费者-%03d: 我要:n, i); Sleep(300); while (1) printf( 消费者-%03d: 卖给我!n, i); P(g_semProduct); / 等待产品 P(g_mutex); / 有产品,先锁住缓冲区 g_buf ptr = g_buf.start; / 记录消费的物品 g_buf.start = (g_buf.start+1)%BUFFER_NUM; / 再移动缓冲区指针 V(g_mutex); / 让其他消费者或生产者使用 g_buf printf( 消费者-%03d: 我要 buf%d = %sn, i, ptr, thingg_ductptr); Sleep(rate*rand()%10+110); printf(消费者-%03d: 我需要 buf%d= %sn, i, ptr, thingg_ductptr); V(g_semBuffer); / 消费完毕,并释放一个缓冲 return 0; / 生产者线程 DWORD WINAPI Producer(LPVOID para) int i = *(int *)para - CONSUMER_NUM; int ptr; int data; / 产品 printf(生产者-%03d: 我来啦!n, i); Sleep(300); while (1) printf(生产者-%03d: 我努力生产n, i); Sleep(rate*rand()%10+110); data = rand()%10; printf(生产者-%03d: 生产一个东西 data = %s!n, i, thingdata); P(g_semBuffer); / 等待存放空间 P(g_mutex); / 有地方,先锁住缓冲区 g_buf ptr = g_buf.end; / 记录消费的物品 g_buf.end = (g_buf.end+1)%BUFFER_NUM; / 再移动缓冲区指针 V(g_mutex); / 让其他消费者或生产者使用 g_buf printf(生产者-%03d: 放到仓库 buf%d = %sn, i, ptr, thingdata); g_ductptr = data; Sleep(rate/2*rand()%10+110); printf(生产者-%03d: buf%d = %s做好了,大家买吧!n, i, ptr, thingg_ductptr); V(g_semProduct); / 放好了完毕,释放一个产品 return 0; int main(int argc, char *argv) / 线程技术,前面为消费者线程,后面为生产者线程 HANDLE hThreadCONSUMER_NUM+PRODUCER_NUM; / 线程计数 /srand(time(); DWORD tid; int i=0; / 初始化信号量 g_mutex = CreateSemaphore(NULL, BUFFER_NUM, BUFFER_NUM, mutexOfConsumerAndProducer); /缓冲区互斥信号灯 g_semBuffer = CreateSemaphore(NULL, BUFFER_NUM, BUFFER_NUM, BufferSemaphone); /有无存放空间 g_semProduct = CreateSemaphore(NULL, 0, BUFFER_NUM, ProductSemaphone); /有无产品 if ( !g_semBuffer|!g_semProduct|!g_mutex) printf(Create Semaphone Error!n); return -1; int totalThreads = CONSUMER_NUM+PRODUCER_NUM; / 开启消费者线程 printf(消费者购买!n); for (i=0; iCONSUMER_NUM; i+) hThreadi = CreateThread(NULL, 0, Consumer, &i, 0, &tid); if ( hThreadi ) WaitForSingleObject(hThreadi, 10); printf(生产者生产!n); for (; itotalThreads; i+) hThreadi = CreateThread(NULL, 0, Producer, &i, 0, &tid); if ( hThreadi ) WaitForSingleObject(hThreadi, 10); / 生产者和消费者的执行 WaitForMultipleObjects(totalThreads, hThread, TRUE, INFINITE); return 0; 2. 根据信号灯的设置原理,补齐程序中的空格;见步骤蓝色字体处。3. 调试进程同步与互斥程序,描述整个程序的执行过程;1) 同步程序:一共有10个生产者,10个消费者,10件商品,生产者之间可以是同步的,消费者的购买行为也可以是同步的一个生产者生产行为跟另一个消费者购买已有的库存或者在其他生产者那里购买商品也可以是同步的。2) 互斥程序:生产者生产正在被需求的产品时,和对该商品需求的消费者是互斥的,消费者只能等待生产完成后才能购买。储存行为跟该商品的生产行为也是互斥的。4. 描述程序执行结果,并抓取图片。首先是消费者需求,然后才是生产者按需求生产,否则生产的产品只能库存。消费者需求在变动的时候,生产者生产的产品只能暂时库存,等待其他有需求的消费者购买,如此一直循环。四、 实验收获和建议1. 分析实验或程序的运行过程首先是消费者
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新型城镇化建设房地产经纪人代理服务合同
- 2025版山西JF标准建筑工程施工合同法律风险防范
- 2025版水泥供应链运输管理服务合同
- 2025年度单位定向人才引进合同协议书
- 2025年智能电网标准变压器安装施工合同范本(智能监控)
- 2025版劳动法培训与职业健康管理服务合同
- 2025年度出租车租赁合同及应急调度服务协议
- 2025版签约儿科疾病治疗服务合同
- 自考专业(公共关系)能力提升B卷题库附答案详解【A卷】
- 重难点解析鲁教版(五四制)8年级数学下册试题及答案详解(名校卷)
- 停工缓建项目管理办法
- 淋巴水肿健康科普
- 采购应急计划管理办法
- 上海选调生面试题和考官用题本及答案21套
- 2025年学校食堂从业人员食品安全知识培训考试试题及答案
- 2025年国家电投校园招聘笔试考点考试题库及答案
- 让情绪有着落-2025年情绪营销8大趋势洞察报告
- 教师校园安全培训课件
- 头皮健康与头发生长关系的研究
- Odoo面试题及答案
- 2025年全国I卷英语 高考真题
评论
0/150
提交评论