生产者与消费者算法13540.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《生产者与消费者算法13540.docx》由会员分享,可在线阅读,更多相关《生产者与消费者算法13540.docx(11页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、#inccludde#inccludde#inccludde#inccludde#inccludde/定义义一些常常量;/本程程序允许许的最大大临界区区数;#deffinee MAAX_BBUFFFER_NUMM 100/秒到到微秒的的乘法因因子;#deffinee INNTE_PERR_SEEC 110000/本程程序允许许的生产产和消费费线程的的总数;#deffinee MAAX_TTHREEAD_NUMM 644/定义义一个结结构,记记录在测测试文件件中指定定的每一一个线程程的参数数struuct ThrreaddInffo intt seeriaal; /线程序序列号 chaar ee
2、ntiity; /是PP还是CC douublee deelayy; /线程程延迟 intt thhreaad_rrequuesttMAAX_TTHREEAD_NUMM; /线程请请求队列列 intt n_reqquesst; /请请求个数数;/全局局变量的的定义/临界界区对象象的声明明,用于于管理缓缓冲区的的互斥访访问;CRITTICAAL_SSECTTIONN PCC_CrritiicallMAAX_BBUFFFER_NUMM; int BBufffer_CriiticcalMAXX_BUUFFEER_NNUM; /缓冲冲区声明明,用于于存放产产品;HANDDLE h_TThreeadMA
3、XX_THHREAAD_NNUM; /用用于存储储每个线线程句柄柄的数组组;ThreeadIInfoo Thhreaad_IInfooMAAX_TTHREEAD_NUMM; /线程信信息数组组;HANDDLE emppty_semmaphhoree; /一个信信号量;HANDDLE h_mmuteex; /一个互互斥量;DWORRD n_TThreead = 00; /实际际的线程程的数目目;DWORRD n_BBufffer_or_Criiticcal; /实际际的缓冲冲区或者者临界区区的数目目;HANDDLE h_SSemaaphooreMAXX_THHREAAD_NNUM; /生产产者允
4、许许消费者者开始消消费的信信号量;/生产产消费及及辅助函函数的声声明voidd PProdducee(vooid *p);voidd CConssumee(vooid *p); booll IIfInnOthherRRequuestt(innt);int FFinddProoduccePoositton();int FFinddBuffferrPossitiion(intt);int maiin(vvoidd) /声声明所需需变量; DWOORD waait_forr_alll; ifsstreeam inFFilee; /初初始化缓缓冲区; forr(innt ii=0;i MAXX_BUU
5、FFEER_NNUM;i+) Buuffeer_CCritticaalii = -11; /初初始化每每个线程程的请求求队列; forr(innt jj=0;jMMAX_THRREADD_NUUM;jj+) foor(iint k=00;kMAXX_THHREAAD_NNUM;k+) TThreead_Inffojj.tthreead_reqquesstkk = -11; Thhreaad_IInfooj.n_reqquesst = 0; /初初始化临临界区; forr(i =0;i n_Buffferr_orr_Crritiicall; inFFilee.geet(); priintff(输
6、输入文件件是:n); /回回显获得得的缓冲冲区的数数目信息息; priintff(%d n,(innt) n_BBufffer_or_Criiticcal); /提提取每个个线程的的信息到到相应数数据结构构中; whiile(inFFilee) innFille TThreead_Inffonn_Thhreaad.serriall; innFille TThreead_Inffonn_Thhreaad.enttityy; innFille TThreead_Inffonn_Thhreaad.dellay; chhar c; inFFilee.geet(cc); whhilee(c!=n& !i
7、nFFilee.eoof() iinFiile TThreead_Inffonn_Thhreaad.thrreadd_reequeestThrreadd_Innfon_TThreead.n_reqquesst+; iinFiile.gett(c); n_Thrreadd+; /回回显获得得的线程程信息,便便于确认认正确性性; forr(j=0;jj(iint) n_Thrreadd;j+) innt TTempp_seeriaal = TThreead_Inffojj.sseriial; chhar TTempp_enntitty = TThreead_Inffojj.eentiity; do
8、oublle TTempp_deelayy = TThreead_Inffojj.ddelaay; prrinttf( nn thhreaad%22d %c %f ,Temmp_sseriial,Temmp_eentiity,Temmp_ddelaay); innt TTempp_reequeest = TThreead_Inffojj.nn_reequeest; foor(iint k=00;kTemmp_rrequuestt;k+) pprinntf( %d , TThreead_Inffojj.tthreead_reqquesstkk); cooutenndl; priintff(nnn
9、);/创建建在模拟拟过程中中几个必必要的信信号量 emppty_semmaphhoree=CrreatteSeemapphorre(NNULLL,n_Buffferr_orr_Crritiicall,n_Buffferr_orr_Crritiicall, seemapphorre_ffor_emppty); h_mmuteex = CrreatteMuutexx(NUULL,FALLSE,muutexx_foor_uupdaate); /下下面这个个循环用用线程的的ID号号来为相相应生产产线程的的产品读读写时所所 /使使用的同同步信号号量命名名; forr(j=0;jj(iint)n_TThr
10、eead;j+) sttd:strringg lpp =semmaphhoree_foor_pprodducee_; innt ttempp =jj; whhilee(teemp) chhar c = (ccharr)(ttempp%100); lpp+=cc; teemp/=100; h_Semmaphhoreej+1=CreeateeSemmaphhoree(NUULL,0,nn_Thhreaad,llp.cc_sttr(); /创创建生产产者和消消费者线线程; forr(i =0;i (innt) n_TThreead;i+) iff(Thhreaad_IInfooi.enntitty
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 生产者 消费者 算法 13540
![提示](https://www.deliwenku.com/images/bang_tan.gif)
限制150内