北邮操作系统进程同步实验报告及源代码.doc

北邮操作系统进程同步实验报告及源代码.doc

ID:48376691

大小:261.44 KB

页数:7页

时间:2019-12-03

北邮操作系统进程同步实验报告及源代码.doc_第1页
北邮操作系统进程同步实验报告及源代码.doc_第2页
北邮操作系统进程同步实验报告及源代码.doc_第3页
北邮操作系统进程同步实验报告及源代码.doc_第4页
北邮操作系统进程同步实验报告及源代码.doc_第5页
资源描述:

《北邮操作系统进程同步实验报告及源代码.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

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

3、r(LPVOIDlpPara)是生产者等待缓冲区的使用权并对缓冲区进行操作DWORDWINAPIconsumer(LPVOIDlpPara)是消费者等待缓冲区的使用权并对缓冲区进行操作该程序模拟生产者消费者问题,首先要设置缓冲区的大小,输入请求资源的各个进程的信息以及请求时间,并且按照请求时间对各进程进行排序,创建线程,然后按序依次对缓冲区进行操作,详细设计见源代码。5、程序运行结果截图:只有生产者请求,没有消费者请求,请求满足只有消费者请求,没有生产者请求,消费者的请求不成功:生产者请求大于消费者请求并且消费者请求在生产者放入产品之后:

4、消费者请求多于生产者请求,只能满足部分消费者请求,不能满足全部:6、源代码:#include#include#include#include#include#includeusingnamespacestd;#defineMAX_BUF1000#defineMAX_REQ20HANDLEmutex;HANDLEfull;HANDLEempty;HANDLEthread[MAX_REQ];DWORDpro_id[MAX_REQ

5、];DWORDcon_id[MAX_REQ];structrequest{inttype;//记录生产者消费者的类型intseq;//记录请求次序}req[MAX_REQ];intbuf_size;intreq_size;intno;intbuffer[MAX_BUF];intin;intout;intresult;boolcmp(requesta,requestb){returna.seq

6、);WaitForSingleObject(mutex,INFINITE);printf("生产者%d将第%d号产品放入缓冲区……",(int)lpPara,no);buffer[in]=no++;in=(in+1)%buf_size;printf("成功放入缓冲区!",(int)lpPara);ReleaseMutex(mutex);ReleaseSemaphore(empty,1,NULL);return0;}DWORDWINAPIconsumer(LPVOIDlpPara){WaitForSingleObject(emp

7、ty,INFINITE);WaitForSingleObject(mutex,INFINITE);printf("消费者%d将第%d号产品从缓冲区取出……",(int)lpPara,buffer[out]);buffer[out]=0;printf("成功从缓冲区取出!",(int)lpPara);ReleaseMutex(mutex);out=(out+1)%buf_size;ReleaseSemaphore(full,1,NULL);return0;}intmain(){inti;intp=0;no=1;in=out=0;

8、memset(buffer,0,sizeof(buffer));printf("请设置缓冲区大小:");scanf("%d",&buf_size);printf("请输入请求使用资源进程的个数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。