北邮操作系统进程同步实验报告及源代码.docx
《北邮操作系统进程同步实验报告及源代码.docx》由会员分享,可在线阅读,更多相关《北邮操作系统进程同步实验报告及源代码.docx(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上进程管理实验报告1实验目的:(1)理解进程/线程同步的方法,学会运用进程/线程同步的方法解决实际问题;(2)了解windows系统或unix/linux系统下中信号量的使用方法。2实验内容编写一个有关生产者和消费者的程序:每个生产者每次生产一个产品存入仓库,每个消费者每次从仓库中取出一个产品进行消费,仓库大小有限,每次只能有一个生产者或消费者访问仓库。要求:采用信号量机制。3、环境说明本实验是在win7环境下使用dev编译器实现的,采用Win API的信号量机制。4、程序设计说明该程序根据教材中的消费者生产者问题编写的,使用了教材中提供的框架思路以及库函数,使用 Cr
2、eateThread建立新的线程,使用CreateMutex创建一个互斥信号量,使用CreateSemaphore创建信号量,使用ReleaseMutex释放线程的互斥信号量,使用ReleaseSemaphore对指定的信号量增加指定的值,使用WaitForSingleObject等待空位,使用CloseHandle在操作结束后关闭线程和信号量。在这个程序里我设计了三个函数: Int main()是主函数,其中包含了缓冲区大小的设置,生产者消费者发出请求等内容以及线程创建等内容DWORD WINAPI producer(LPVOID lpPara)是生产者等待缓冲区的使用权并对缓冲区进行操作D
3、WORD WINAPI consumer(LPVOID lpPara)是消费者等待缓冲区的使用权并对缓冲区进行操作 该程序模拟生产者消费者问题,首先要设置缓冲区的大小,输入请求资源的各个进程的信息以及请求时间,并且按照请求时间对各进程进行排序,创建线程,然后按序依次对缓冲区进行操作,详细设计见源代码。5、程序运行结果截图:只有生产者请求,没有消费者请求,请求满足只有消费者请求,没有生产者请求,消费者的请求不成功:生产者请求大于消费者请求并且消费者请求在生产者放入产品之后:消费者请求多于生产者请求,只能满足部分消费者请求,不能满足全部:6、源代码:#include #include #inclu
4、de #include #include #include using namespace std;#define MAX_BUF 1000#define MAX_REQ 20 HANDLE mutex;HANDLE full;HANDLE empty; HANDLE threadMAX_REQ;DWORD pro_idMAX_REQ;DWORD con_idMAX_REQ;struct request int type;/记录生产者消费者的类型 int seq; /记录请求次序 reqMAX_REQ; int buf_size; int req_size; int no;int buffer
5、MAX_BUF;int in;int out; int result;bool cmp(request a,request b) return a.seqb.seq; DWORD WINAPI producer(LPVOID lpPara) WaitForSingleObject(full,INFINITE); WaitForSingleObject(mutex,INFINITE); printf(生产者%d将第%d号产品放入缓冲区n,(int)lpPara,no); bufferin=no+; in=(in+1)%buf_size; printf(成功放入缓冲区!nn,(int)lpPara
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 进程 同步 实验 报告 源代码
限制150内