任务5- 事件对象解决读写者问题Word格式文档下载.docx

上传人:b****9 文档编号:13092512 上传时间:2022-10-04 格式:DOCX 页数:7 大小:21.30KB
下载 相关 举报
任务5- 事件对象解决读写者问题Word格式文档下载.docx_第1页
第1页 / 共7页
任务5- 事件对象解决读写者问题Word格式文档下载.docx_第2页
第2页 / 共7页
任务5- 事件对象解决读写者问题Word格式文档下载.docx_第3页
第3页 / 共7页
任务5- 事件对象解决读写者问题Word格式文档下载.docx_第4页
第4页 / 共7页
任务5- 事件对象解决读写者问题Word格式文档下载.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

任务5- 事件对象解决读写者问题Word格式文档下载.docx

《任务5- 事件对象解决读写者问题Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《任务5- 事件对象解决读写者问题Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。

任务5- 事件对象解决读写者问题Word格式文档下载.docx

S1=1,S2=0intC;

thecountofrecource

wait():

Wait(S1);

C--;

if(C<

0){

signal(S1);

wait(S2);

}

signal(S2);

signal():

wait(S1);

C++;

=0) {

else{

读者-写者问题算法如下:

Writer:

wait(Wmutex);

//dowritingsignal(Wmutex);

Reader:

wait(Rmutex);

if(Rcount==0){wait(Wmutex);

Rcount++;

signal(Rmutex);

//doreadingwait(Rmutex);

Rcount--;

if(Rcount==0){

signal(Wmutex);

signal(Rmutex);

设计思路

利用事件对象实现P、V操作

主要数据结构intreadcount=0;

intwritecount=0;

structMySemaphore

{

HANDLEs1,s2;

intc;

};

MySemaphoreReaderS;

MySemaphoreWriterS;

structThreadInfo

int serial;

charentity;

double delay;

double persist;

主要代码结构及分析

///////////////////////////////////////////////////////////////

//ReaderPriorityfuction

//file:

filename

//////////////////////////////////////////////////////////////

voidReaderPriority(char*file)

DWORDn_thread=0;

DWORDthread_ID;

DWORDwait_for_all;

initMySemaphore(&

ReaderS,1);

initMySemaphore(&

WriterS,1);

readcount=0;

//initreadercount

//TreadObjectArray

HANDLEh_Thread[MAX_THREAD_NUM];

ThreadInfothread_info[MAX_THREAD_NUM];

ifstreaminFile;

inFile.open(file);

//openfileprintf("

ReaderPriority:

\n\n"

);

while(inFile)

//readeveryreader/writerinfoinFile>

>

thread_info[n_thread].serial;

inFile>

thread_info[n_thread].entity;

thread_info[n_thread].delay;

thread_info[n_thread++].persist;

inFile.get();

}//endwhileinFile.close();

for(inti=0;

i<

(int)(n_thread);

i++)

if(thread_info[i].entity=='

R'

||thread_info[1].entity=='

r'

//CreateReaderthread

h_Thread[i] = CreateThread(

NULL,

0,

(LPTHREAD_START_ROUTINE)(RP_ReaderThread),

&

thread_ID);

thread_info[i],

//CreateWriterthread

(LPTHREAD_START_ROUTINE)(RP_WriterThread),&

}//endfor

//waitingallthreadwillbeenfinished

wait_for_all=WaitForMultipleObjects(n_thread,h_Thread,TRUE,-1);

printf("

AllreaderandwriterthreadhavefinishedOperating.\n"

);

closeMySemaphore(&

WriterS);

closeMySemaphore(&

ReaderS);

}//endreaderPriority

voidwait(MySemaphore*myS)

WaitForSingleObject(myS->

s1,INFINITE);

myS->

c--;

if(myS->

c<

0)

SetEvent(myS->

s1);

WaitForSingleObject(myS->

s2,INFINITE);

voidsignal(MySemaphore*myS)

c++;

=0)

else

SetEvent(myS->

s2);

////////////////////////////////////

//readerpriority--readerthread

//p:

readerthreadinfo

///////////////////////////////////

DWORDWINAPIRP_ReaderThread(void*p)

DWORDm_delay;

DWORDm_persist;

intm_serial;

//getinfofroampara

m_serial=((ThreadInfo*)(p))->

serial;

m_delay=(DWORD)(((ThreadInfo*)(p))->

delay*INTE_PER_SEC);

m_persist=(DWORD)(((ThreadInfo*)(p))->

persist*INTE_PER_SEC);

Sleep(m_delay);

printf("

Readerthread%dsentsthereadingrequire.\n"

m_serial);

wait(&

if(readcount==0)

wait(&

readcount++;

signal(&

//readfile

Readerthread%dbeginstoreadfile.\n"

Sleep(m_persist);

//exitthread

Readerthread%dfinishedreadingfile.\n"

readcount--;

if(readcount==0)

signal(&

return0;

//Readerpriority--writerthread

writerthreadinfo

DWORDWINAPIRP_WriterThread(void*p)

DWORDm_persist;

Writerthread%dsentsthewritingrequire.\n"

//waitresourcewait(&

//writetothefile

Writerthread%dbeginstowritetothefile.\n"

Writerthread%dfinishedWritingtothefile.\n"

//releaseresourcesignal(&

return0;

3.实践结果

基本数据:

²

源程序代码行数:

256

完成实践投入的时间(小时数):

5

ü

资料查阅时间:

1.5

编程调试时间:

3.5

测试数据设计

“ex5.dat”中测试数据为:

1R35

2W45

3R52

4R65

5W53

测试结果分析

待所有读进程执行完毕后写进程才开始一一执行,结果正确。

4.实践体会

实践过程中遇到的问题及解决过程

在调试时,一开始总会出现某个进程sentsrequire的信息重复出现两次,但该线程只执行过一次的现象,调整显示代码的位置得不到正确的结果。

后将读写进程函数由voidRP_ReaderThread(void*p);

voidRP_WriterThrea

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1