版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武谨欢制多複头验报告学院:计算机科学学院专业:软件工程2018年4月20日姓名苗琪学号2016040121078班级2班指导老师李琼课程名称操作系统实践成绩实验名称进程同步与互斥的模拟与实现1实验目的目的:掌握软件方法和信号灯方法解决进程的同步与互斥问题。重点:进程的互斥、进程的同步、锁、PV信号灯。难点:进程同步与互斥的实现。实验内容请使用PV信号灯方法解决并实现生产者一消费者问题。实验环境硬件环境:PC机软件环境:Windows操作系统,用JAVA语言实现;或Linux操作系统,用C语言实现。实验方法和步骤(含设计)要求:有问题分析过程,算法(用伪代码描述),流程图,源代码等。问题的描述如
2、下:假设一组生产者进程卩,卩2,,P和一组消费者进程c,c,,C,通过n个缓冲区组成缓冲池,共同完成“生产和消费”任务。每个缓冲区存放一个消息,生产者将生产出的消息放入空缓冲区,消费者从满缓冲区中取出消息。当所有缓冲区均满时,生产者必须等待消费者提供空缓冲区;当缓冲池中所有缓冲区全为空时,消费者必须等待生产者提供有消息缓冲区。另外,对所有生产者和消费者进程来说,把缓冲池看成一个整体,因此缓冲池是临界资源,即任何一个进程在对池中某个缓冲区进行“存”或“取”操作时须和其他进程互斥执行。用信号量机制来解决这种问题,首先定义下列公共信号量。信号量mutex。初值为1,用于控制互斥访问缓冲池。信号量fu
3、ll。初值为0用于计数。full值表示当前缓冲池中“满”缓冲区数。信号量empty。初值为n,用于计数。Empty值表示当前缓冲池中“空”缓冲区数。有限缓冲区生产者/消费者进程描述如下:typedefstruet/消息类型/缓冲类型/信号量/消息变量/设置信号量初值item;typedefstruetstruetiteminst;struetbuffer*next;buffer;semaphorefull,empty,mutex;struetitemnextp,nextc;full=0;empty二n;mutex=1;生产进程代码框架如下:doprodueeaniteminnextpP(emp
4、ty);P(mutex);/获得一个空缓冲区/将nextp数据复制到空缓冲区/将缓冲区加入满缓冲区队列V(full);V(mutex);while(1);消费者进程代码框架如下:doP(full);P(mutex);/获得一个满缓冲区/将满缓冲区数据复制到nextc/将缓冲区还回空缓冲队列V(empty);V(mutex);consumetheiteminnextcwhile(1);流程图如下:源代码如下:#include#includeconstunsignedshortSIZE_0F_BUFFER=10;/thelengthofbufferunsignedshortbufferSIZE_O
5、F_BUFFER二0;/createspaceforbufferunsignedshortin=0;/thepositionenteringthespaceunsignedshortout=0;positionleavingthespaceunsignedshortProduct_ID=0;from1to10,notforcount/the/theIDofmarkofmarkofproduct,unsignedshortConsume_ID=0;product_IDinthebuffer/theIDofconsumeunsignedintproduce_sum=0;/thetotalprodu
6、cenumberunsignedintconsume_sum=0;/thetotalconsumenumberHANDLEmutex;/themutexbetweenthreadsHANDLEFull_Semaphore;/theresourcesemaphore:bufferisfullHANDLEEmptySemaphore;/theresourcesemaphore:bufferisemptyconstunsignedshortp_count=20;/thenumberofproduceonetimeconstunsignedshortc_count=6;/thenumberofcons
7、umeronetimeconstunsignedshorts_count二p_count+c_count;/thesumnumberofthreadsHANDLEthreadss_count;/thehandleofeverythreadDWORDProducer_IDp_count;/themarkofproducerthreadDWORDConsumer_IDc_count;/themarkofconsumerthreadunsignedshortcontrol=1;/controltheprogramrunorstopDWORDWINAPIproducer(LPVOID);/thepro
8、ducerthreadDWORDWINAPIconsumer(LPVOID);/theconsumerthreadvoidproduce();voidconsume();voidCreate_P_Threads();/createproducerthreadvoidCreate_C_Threads();/createconsumerthreadvoidProduct_Sum();/printthetotalofremainproductnumberandprintthebuffervoidinfo();/infovoidProduct_Sum()inti,sum=0;for(i=O;iSIZE
9、_OF_BUFFER;i+)if(bufferi!=0)sum+;std:coutsum.7for(i=0;iSIZE_OF_BUFFER;i+)std:coutbufferi;printf(n);voidproduce()Iinti;std:cout=10)ProductID=0;Product_ID+;produce_sum+;bufferin二Product_ID;printf(“buffer%d=%d,in,Product_ID);in=(in+l)%SIZE_OF_BUFFER;Product_Sum();voidconsume()inti;std:coutconsume;consu
10、me_sum+;Consume_ID=bufferout;printf(“buffer%d=%d,out,Consume_ID);bufferout=0;out=(out+l)%SIZE_OF_BUFFER;Product_Sum();DWORDWINAPIproducer(LPVOID)while(control)WaitForSingleObject(Full_Semaphore,INFINITE);operationWaitForSingleObject(mutex,INFINITE);operationproduce();Sleep(lOOO);ReleaseMutex(mutex);
11、operationReleaseSemaphore(Empty_Semaphore,l,NULL);operationreturn0;DWORDWINAPIconsumer(LPVOID)while(control)WaitForSingleObject(Empty_Semaphore,INFINITE);WaitForSingleObject(mutex,INFINITE);consume();Sleep(lOOO);ReleaseMutex(mutex);/producerthread/resourcesemaphoreP/themutexP/resourcesemaphoreP/them
12、utexP/consumerthreadReleaseSemaphore(FullSemaphore,l,NULL);return0;voidCreate_P_Threads()/createproducerthreadfor(inti=0;ip_count;i+)threadsi=CreateThread(NULL,O,producer,NULL,0,&Producer_IDi);if(threadsi二二NULL)control=0;voidCreate_C_Threads()for(inti二p_count;is_count;i+)threadsi=CreateThread(NULL,0
13、,consumer,NULL,0,&Consumer_IDi-p_count);if(threadsi二二NULL)control=0;voidinfo()std:coutnstd:endl;std:cout*Ididrefertotheprogramontheweb.std:endl;std:cout*andIsimplifysomethingsandmakeitmorepowful!std:endl;std:cout*Butitisreallyawordawordknockedoutbymebasedonunderstandingnstd:endl;std:coutproduce/cons
14、umeremain_totalbuffer_state(from0to9)std:endl;intmain()info();mutex=CreateMutex(NULL,FALSE,NULL);Full_Semaphore二CreateSemaphore(NULL,SIZE_OF_BUFFER,SIZE_OF_BUFFER,NULL);Empty.Semaphore二CreateSemaphore(NULL,0,SIZE_0F_BUFFER,NULL);Create_P_Threads();Create_C_Threads();while(control)if(getchar()020000s
15、td:coutstd:endl;std:coutthetotalproduceproductnumberisproduce_sumstd:endl;std:coutthetotalconsumeproductnumberisconsume_sumstd:endl;control=0;return0;程序及测试结果要求:多次测试,附测试步骤及截图、测试结果截图等。59)10020000101010*1didrefertothepro呂antheweb=tnHc+*+*andI5im:difysojobthitigs?uidmak日itnormpful!*ButitistesLIyawaTdawe
16、irdknockedoutbymebasedmundaTstsnding3E:Micro5oftVi-suaIS5jdioCctnmonMSDe9BEinDebug1.exethetotalproduceproductnuniheris10th日wdnsumsproductnumb曰匸is3E:Micro5oftVisuaISrjdioVCcmmonMSOrvBBXBinXDebugXI.eweXX000-0000397828oo_uooo77?6777000006666566600005555545550004444443444OOOOOQOOpraducs/cqusuiihr&mLJi_t
17、DtalproducebuffEr0-11producebuffer1=22producebufferZ=33jxrciduesbuffer3-44:producebuffer4z55producebufferS=65prcidu匚曰buffer6.1=7praijcebufler7=83producebufferE=99producebuffer91=1010gnsunebuffer0-19conLuiELuffer1=22consumebuffer2=3bufier101212121212121200333333223300000o0noogs9g9producebufler6=7prod
18、ucebuffer7=8producebuffer81=9foraducabuffer9.1=10gnsunebufferC1=1COH3UnEbuffer1=2conGunebuffer2-3cdhsluibbuffer3=4consiinBbufler4=5ccihsuiiebufferB-6consunebuffer6-7producebuffer0.1=1gnsunebuffer7=Sproducebuffer1=2fconGunebuffer8-9praducsbuffer2.1=3prai.ic9bufler3=4fecinsunEbuffer9=10producebuffer41=5producebuffer5=6producebuffer6=7ImzinsuiTEbuffer0=1producebijffer7-BIconsluibbuffer1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025~2026学年河北省邢台市任泽区骆庄学区小学联考冀教版三年级上册12月月考数学试卷【附答案】
- 2027届河南省鲁山、舞钢九年级数学第一学期期末学业质量监测模拟试题含解析
- 车间级日常安全管理实务培训
- Photoshop 7.0 试题汇编及详细答案
- 2027届四川省长宁县七年级数学第一学期期末质量跟踪监视模拟试题含解析
- PCR检测技术考核试题及详细参考答案
- 预制箱梁架设及支座安装方案
- 促排卵卵巢低反应规范化处理共识
- 刺法灸法考试试题及答案
- P2P行业面试题及详细答案(实战完整版)
- 小学道德与法治新部编版六年级上册全册知识点填空练习(2026秋)
- 孕产妇高危五色管理医学培训
- 2026年城区第二小学阳光招生工作专项整治自查报告
- 新版预防未成年人犯罪法知识竞赛题库及答案详解
- 2026年市政工程质量员专业技能考试必考题库与答案
- 2026年医学科研诚信与伦理课件
- 2026年储能系统(充放电控制)试题及答案
- 2026赤峰市妇幼保健院招聘40名控制数专业技术人员笔试模拟试题及答案详解
- 山东省2027综合评价招生《综合素质测评》模拟试卷C卷
- 2025手术室护理质量敏感指标
- 智慧工地项目数据台账管理手册
评论
0/150
提交评论