- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验二进程同步实验报告 实验报告 操作系统实验进程同步互斥 Exe1:观察多进程对共享文件的写入情况。编写程序:打开共享文件,由父进程创建两个子进程,父进程和两个子进程分别连续向共享文件中写入多行字符串。多次运行程序,或更改写入行数,观察分析共享文件的写”。 Exe2:观察多进程通过共享文件进行通信或合作情况。编写程序:打开共享文件,由父进程创建一个子进程,父进程从外界获取字符串,并将其写入共享文件;子进程从共享文件中获取字符串,并将其输出出来。多次运行程序,观察分析进程运行结果。 Exe3:在上述1、2实验程序基础上,用lock/unlock系统调用实现对共享文件的同步互斥访问,多次运行程序,观察分析运行结果。 进程管理实验报告 1.实验目的: 理解进程/线程同步的方法,学会运用进程/线程同步的方法解决实际问题; 了解windows系统或unix/linux系统下中信号量的使用方法。 2.实验内容 编写一个有关生产者和消费者的程序:每个生产者每次生产一个产品存入仓库,每个消费者每次从仓库中取出一个产品进行消费,仓库大小有限,每次只能有一个生产者或消费者访问仓库。要求:采用信号量机制。 3、环境说明 本实验是在win7环境下使用dev编译器实现的,采用WinAPI的信号量机制。 4、程序设计说明 该程序根据教材中的消费者生产者问题编写的,使用了教材中提供的框架思路以及库函数,使用CreateThread建立新的线程,使用CreateMutex创建一个互斥信号量,使用CreateSemaphore创建信号量,使用ReleaseMutex释放线程的互斥信号量,使用ReleaseSemaphore对指定的信号量增加指定的值,使用WaitForSingleObject等待空位,使用CloseHandle在操作结束后关闭线程和信号量。 在这个程序里我设计了三个函数: Intmain是主函数,其中包含了缓冲区大小的设置,生产者消费者发出请求等内容以及线程创建等内容 DWORDWINAPIproducer(LPVOIDlpPara)是生产者等待缓冲区的使用权并对缓冲区进行操作 DWORDWINAPIconsumer(LPVOIDlpPara)是消费者等待缓冲区的使用权并对缓冲区进行操作 该程序模拟生产者消费者问题,首先要设置缓冲区的大小,输入请求资源的各个进程的信息以及请求时间,并且按照请求时间对各进程进行排序,创建线程,然后按序依次对缓冲区进行操作,详细设计见源代码。 5、程序运行结果截图: 只有生产者请求,没有消费者请求,请求满足 只有消费者请求,没有生产者请求,消费者的请求不成功: 生产者请求大于消费者请求并且消费者请求在生产者放入产品之后: 消费者请求多于生产者请求,只能满足部分消费者请求,不能满足全部: 6、源代码: #include #include #include #include #include #include usingnamespacestd; #defineMAX_BUF1000 #defineMAX_REQ20 HANDLEmutex; HANDLEfull; HANDLEempty; HANDLEthread[MAX_REQ]; DWORDpro_id[MAX_REQ]; DWORDcon_id[MAX_REQ]; structrequest{ inttype;//记录生产者消费者的类型 intseq;//记录请求次序 }req[MAX_REQ]; intbuf_size; intreq_size; intno; intbuffer[MAX_BUF]; intin; intout; intresult; boolcmp(requesta,requestb) {;} DWORDWINAPIproducer(LPVOIDlpPara) { WaitForSingleObject(full,INFINITE); WaitForSingleObject(mutex,INFINITE); printf(生产者%d将第%d号产品放入缓冲区……\n,(int)lpPara,no); buffer[in]=no++; in=(in+1)%buf_size; printf(成功放入缓冲区!\n\n,(int)lpPara); ReleaseMutex(mutex); ReleaseSemaphore(empty,1,NULL); return0; } DWORDWINAPIconsumer(LPVOIDlpPara) { WaitForSingleObject(empty,INFINITE); WaitForSingleObject(mutex,INFINITE); printf(消费者%d将第%d号产品从缓冲区取出……\n,
原创力文档


文档评论(0)