北邮操作系统进程同步实验报告及源代码_第1页
北邮操作系统进程同步实验报告及源代码_第2页
北邮操作系统进程同步实验报告及源代码_第3页
北邮操作系统进程同步实验报告及源代码_第4页
北邮操作系统进程同步实验报告及源代码_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、进程管理实验报告1 .实验目的:(1)理解进程/线程同步的方法,学会运用进程/线程同步的方法解决实际问题;(2) 了解windows系统或unix/linux 系统下中信号量的使用方法。2.实验内容编写一个有关生产者和消费者的程序:每个生产者每次生产一个产品存入仓库,每个消费者每次从仓库中取出一个产品进行消费,仓库大小有限,每次只能有一个生产者或消费者访问仓库。要求:采用信号量机制。3、环境说明本实验是在win7环境下使用dev编译器实现的,采用 Win API的信号量机制。4、程序设计说明该程序根据教材中的消费者生产者问题编写的,使用了教材中提供的框架思 路以及库函数,使用 CreateTh

2、read 建立新的线程,使用CreateMutex创建 一个互斥信号量,使用 CreateSemaphore创建信号量,使用 ReleaseMutex 释放线程的互斥信号量,使用ReleaseSemaphore对指定的信号量增力口指定的值,使用 WaitForSingleObject 等待空位,使用 CloseHandle在操作结束 后关闭线程和信号量。在这个程序里我设计了三个函数:Int main ()是主函数,其中包含了缓冲区大小的设置,生产者消费者 发出请求等内容以及线程创建等内容DWORD WINAPI producer(LPVOID lpPara)是生产者等待缓冲区的使用权 并对缓冲

3、区进行操作DWORD WINAPI consumer(LPVOID lpPara是消费者等待缓冲区的使用权并对缓冲区进行操作该程序模拟生产者消费者问题,首先要设置缓冲区的大小,输入请求资源的 各个进程的信息以及请求时间,并且按照请求时间对各进程进行排序,创建线程,然后按序依次对缓冲区进行操作,详细设计见源代码。5、程序运行结果截图:只有生产者请求,没有消费者请求,请求满足F:QS procucer.exe人圣人择人 设电露输进程田 请求时间:产者进程CD二1进程cg还是生产者进程a > " 请求时间 3B.请求时间为1再融蝙麒熟区Htl寸,蹴舞泮中来时如只有消费者请求,没有生产

4、者请求,消费者的请求不成功:口回 差F:OS procucer.exe2t.程 进 者 产 生程羟瓦滋皿 注0寸0寸 串源程求暴 1“进住强请 区朦整费一程 4T,3-S- 八率人择入 设寓意输 + I + 1L- % Tt ik < lr + IF足- 莆 要 IS 能意 不任求按X LI IP生产者请求大于消费者请求并且消费者请求在生产者放入产品之后:F:OS procucer.exe口回 差n-m H主同立目主总主FJ主用消费者请求多于生产者请求,只能满足部分消费者请求,不能满足全部:- F:OS. pro tn cenex e>也 3者 业广IQ 1 (程 进 者 产 生程

5、滋整滋外源引 3进小时小时(0时 :源程求簟程求 春进注需一廛请 区we费一程芹鱼 MS-S-5 置入择人择人 馔博一霍普输住产者请求往缓冲区中放产品.请求时间为4消费者请求从缓冲区中取产品.请求时间为5,请求时间为6 区年第1号产品从谖神区取出福冲区取出?足. 翁 1 叠 能I1 不任 求按6、源代码:#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>#include <windows.h>

6、; using namespace std;#define MAX_BUF 1000#define MAX_REQ 20HANDLE mutex;HANDLE full;HANDLE empty;HANDLE threadMAX_REQ;DWORD pro_idMAX_REQ;DWORD con_idMAX_REQ;struct requestint type;/ 记录生产者消费者的类型int seq; /记录请求次序reqMAX_REQ;int buf_size;int req_size;int no;int bufferMAX_BUF;int in;int out;int result;b

7、ool cmp(request a,request b) return a.seq<b.seq;DWORD WINAPI producer(LPVOID IpPara)WaitForSingleObject(full,INFINITE);WaitForSingleObject(mutex,INFINITE);printf("生产者dPB第号产品放入缓冲区n",(int)lpPara,no);bufferin=no+;in=(in+1)%buf_size;printf("成功放入缓冲区!nn",(int)lpPara);ReleaseMutex(mu

8、tex);ReleaseSemaphore(empty,1,NULL);return 0;DWORD WINAPI consumer(LPVOID lpPara)WaitForSingleObject(empty,INFINITE);WaitForSingleObject(mutex,INFINITE);printf(" 消费者d将第d号产品从缓冲区取出n",(int)lpPara,bufferout);bufferout=0;printf("成功从缓冲区取出!nn",(int)lpPara);ReleaseMutex(mutex);out=(out+1

9、)%buf_size;ReleaseSemaphore(full,1,NULL);return 0;int main()int i;int p=0;no = 1;in=out=0;memset(buffer, 0, sizeof(buffer);printf(" 请设置缓冲区大小:");scanf("%d”,&buf_size);printf("请输入请求使用资源进程的个数:");scanf("%d”,&req_size);for(i=0;i<req_size;i+)printf("请选择是消费者进程(

10、0)还是生产者进程:");scanf("%d”,&reqi.type);printf(”请输入该进程的请求时间:");scanf("%d”,&reqi.seq);sort(req,req+req_size,cmp);mutex=CreateMutex(NULL,FALSE,NULL);full=CreateSemaphore(NULL,buf_size,buf_size,NULL);empty=CreateSemaphore(NULL,0,buf_size,NULL);for(i=0;i<req_size;i+)if(reqi.ty

11、pe=0)threadi=CreateThread(NULL,0, consumer, (LPVOID)i, 0,&con_idi);if(threadi=NULL)return -1;printf("n消费者请求从缓冲区中取产品,请求时间2%dn",reqi.seq);if(reqi.type=1) threadi=CreateThread(NULL,0,producer,(LPVOID)i,0,&pro_idi);if(threadi=NULL)return -1;printf("n生产者请求往缓冲区中放产品,请求时间2%dn",re

12、qi.seq);result = WaitForMultipleObjects(req_size, thread, TRUE, 500);if (result = WAIT_TIMEOUT)printf("n请求不能被完全满足n");elseprintf("n能够满足所有请求n");for(int i=0; i<req_size; i+)CloseHandle(threadi);CloseHandle(mutex);CloseHandle(full);CloseHandle(empty);system("pause");return 0;7、实验总结:本次实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论