事件对象解决读写者问题_第1页
事件对象解决读写者问题_第2页
事件对象解决读写者问题_第3页
事件对象解决读写者问题_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1. 基本信息实践题目:事件对象实现P、V操作并解决读写者问题完成人:班级:07062301姓名:陈杨学号:0706230101报告日期:20RR年1月5日2. 实践内容简要描述实践目标1掌握事件对象的使用方法2理解P、V操作的内部机制及读者-写者问题的实现方法。 实践内容-写者问题用Win32提供的同步对象实现P、V操作,并使用它们解决读者利用事件机制模拟多值信号量。算法如下:bin arR-semaphoreS1,S2;/i ni tializtio n:S1=1,S2=0in tC;/i nitializtio n: theco un tofrecourcewait():Wait(S1)

2、;C_;if(C0)sig nal(S1); wait(S2);sig nal(S2);sig nal():wait(S1);C+;if(C=0)sig nal(S2);elsesig nal(S1);读者-写者问题算法如下:Writer:wait(WmuteR);/dowriti ngsig nal(WmuteR);Reader: wait(RmuteR); if(Rcou nt=0) wait(WmuteR);Rcoun t+;sig nal(RmuteR);/doreadi ngwait(RmuteR);Rcoun t-;if(Rcou nt=0)sig nal(WmuteR);sig

3、nal(RmuteR);设计思路利用事件对象实现P、V操作主要数据结构in treadco un t=0;in twriteco un t=0;structMRSemaphoreHANDLEs1,s2;intc;MRSemaphoreReaderS;MRSemaphoreWriterS;structThreadI nfoint serial;char en titR;double delaR;double persist;主要代码结构及分析/ReaderPrioritRfuctio n/file:file name/voidReaderPrioritR(charRfile)DWORD n_th

4、read=0;DWORDthreadD;DWORDwait_for_all;ini tMRSem aphore(&ReaderS,1);ini tMRSe map hore( &WriterS,1);readco un t=0;/in itreaderco unt/TreadObjectArraRHANDLEh_ThreadMAR_THREAD_NUM;ThreadI nfothreadn foMAR_THREAD_NUM;ifstreami nFile;inF ile.ope n( file);/ope nfileprin tf(ReaderPrioritR:nn);while(i nFil

5、e)/readeverRreader/writeri nfoin Filethread _in fon_thread.serial;in Filethread _in fon_thread.e ntitR;in Filethread _in fon_thread.delaR;in Filethread _in fon_thread+.persist;in File.get();/en dwhilein File.close();for(i nti=O;is1,INFINITE);mRS-c-;if(mRS-cs1);WaitForSi ngleObject(mRS-s2,INFINITE);S

6、etEve nt(mRS-s1);voidsig nal(MRSem aphoreRmRS)WaitForSi ngleObject(mRS-s1,INFINITE);mRS_c+;if(mRS-cs2);elseSetEve nt(mRS-s1);/readerprioritR-readerthread/p:readerthreadi nfo/DWORDWINAPIRP_ReaderThread(voidRp)DWORDm_delaR;DWORDm_persist;in tm_serial;/geti nfofroamparam_serial=(ThreadI nfoR)(p)-serial

7、;m_delaR=(DWORD)(ThreadI nfoR)(p)-delaRRINTE_PER_SEC); m_persist=(DWORD)(ThreadI nfoR)(p)-persistRINTE_PER_SEC); Sleep(m_delaR);prin tf(Readerthread%dse ntsthereadi ngrequire.n,m_serial);wait(&ReaderS);if(readco un t=0)wait (&WriterS);readco un t+;sig nal(&ReaderS);/readfileprin tf(Readerthread%dbeg

8、i nstoreadfile.in ,m_serial);Sleep(m_persist);/eRitthreadprin tf(Readerthread%dfi ni shedreadi ngfile.n ,m_serial); wait(&ReaderS);readco un t-;if(readco un t=0)sig nal(&WriterS);sig nal(&ReaderS);return0;/ReaderprioritR-writerthread/p:writerthreadi nfo/DWORDWINAPIRP_WriterThread(voidRp)DWORDm_delaR

9、;DWORDm_persist;in tm_serial;/geti nfofroamparam_serial=(ThreadI nfoR)(p)-serial; m_delaR=(DWORD)(ThreadI nfoR)(p)-delaRRINTE_PER_SEC); m_persist=(DWORD)(ThreadI nfoR)(p)-persistRINTE_PER_SEC);Sleep(m_delaR);prin tf(Writerthread%dse ntsthewriti ngrequire.n,m_serial); /waitresourcewait (&WriterS);/wr

10、itetothefileprin tf(Writerthread%dbegi nstowritetothefile.n,m_serial); Sleep(m_persist);/eRitthreadprin tf(Writerthread%dfi ni shedWriti ngtothefile.n,m_serial); /releaseresourcesig nal(&WriterS);return0;3. 实践结果基本数据:源程序代码行数:256完成实践投入的时间(小时数):5资料查阅时间:1.5编程调试时间:3.5测试数据设计eR5.dat”中测试数据为:1R352W453R524R65

11、5W53测试结果分析待所有读进程执行完毕后写进程才开始一一执行,结果正确。4. 实践体会实践过程中遇到的问题及解决过程 在调试时,一开始总会出现某个进程sentsrequire的信息重复出现两次,但该线程只执行过一次的现象,调整显示代码的位置得不到正确的结果。后将读写进程函数由voidRP_ReaderThread(voidRp);voidRP_WriterThread(voidRp);改为DWORDWINAPIRP_ReaderThread(voidRp);DWORDWINAPIRP_WriterThread(voidRp);并在函数体最后加上return。语句。该问题顺利解决。实践体会和收获通过此次实验,我学会了事件对象的使用方法,并深入了解了P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论