- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、阅读者写入者问题描述
有一个公用的数据集,有很多人需要访问,其中一些需要阅读其中的信息,一些需要修改其中的消息。阅读者可以同时访问数据集,而写入者只能互斥的访问数据集,不能与任何的进程一起访问数据区。
二、程序运行说明
1.本程序主要用于说明阅读者写入者问题中的资源互斥访问的调动策略,并模仿其访问的过程。采用书上的伪码编制而成,实际上采用的是读优先策略。
2.在本程序中用于表现的图形界面说明:
在程序编译运行后会出现中间一个大的圆圈表示公用的资源,上面一排五个矩形表示5个读者,下面的五个矩形表示五个写入者。每个读者和写入者都有3种状态,休息,等待和操作(读入或者写入)分别用黑颜色,绿颜色,红颜色表示休息,等待和操作。一旦操作者获得资源,可以进行读或者写,我们就划一条从操作者中心到资源中心的线,表示开始操作。
三、关于阅读者写入者问题的mfc程序分析:
A. ReaderAndWriter.c
变量说明:
HINSTANCE hInst 应用实例句柄 HWND hWndMain 主窗口句柄 HBITMAP hbmpOffscreen 位图句柄 extern int Readercount; 读者数(外部接口) extern int readerstate[CCounter]; 读者状态(外部变量) extern int writerstate[CCounter]; 写入者状态(外部变量) extern int resourcestate[CCounter]; 资源状态(外部变量) extern HANDLE count; 资源(count)句柄
函数说明:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 处理消息函数:
根据进程调度的消息的不同处理不同的消息包括:关闭窗口,销毁资源,画窗口,和重画窗口等
BOOL CreateOffscreen() 获得当前窗口的一个位图句柄 void RenderOffscreen(HDC hDestDC) 通过位图句柄画演示的界面
1.先画资源(中间的大圆表示)
2.接着画读者和写入者:
读者和写入者都用圆表示,根据他们的状态选择画笔(为resting 状态时为黑色圆圈,为等待时为绿色,操作时为红色圆圈)
3.最后画操作:
判断的依据是若读者或者写入者(获得资源)
则令读者和写入者对应编号的资源数组元素为读或者写,这样就可以画出一条线来表示读者或者写入者在进行操作。
BOOL InitApplication(HINSTANCE hInstance) 初始化应用窗口
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) 初始化主窗口
弹出选择对话框进行模式选择,并启动进程
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
调用前面的函数并对进线程消息进行处理
B.Mutex.c
变量说明:
extern HWND hWndMain 在ReaderAndWriter.c中定义(外部接口) extern BOOL bWaitMultiple
在ReaderAndWriter.c中定义(外部接口) int Readercount 读者数 int readerstate[CCounter] 读者状态 int writerstate[CCounter] 写入者状态 int resourcestate[CCounter]
资源状态
CRITICAL_SECTION RP_Write
临界区 HANDLE count Count 资源句柄
函数说明:
1. DWORD WINAPI ReaderThread (LPVOID pVoid)
读者进程:
根据前面的资源分配策略,对于读进程,我们初始化设置都是处于休息状态,然后要是资源可读,根据进程到来的快慢,分配资源给读者,是其从休息,等待到读状态,最后释放资源进入休息状态,一直循环。一旦有一个读者进入临界区,我们就封锁临界区,可以让所用的读者进入,而不让写入者进入,并用一个资源控制readercount,保证每次只有一个进程对变量进行操作。这样,直到每一个读者都读完,没有一个读者的时候,开始释放临界区,这样写入者就可以进入与读者进行资源的争夺,决
您可能关注的文档
- 怎样提高学生的朗读水平.doc
- 怎样让学生的人生有乐趣.doc
- 怎样与学生沟通.doc
- 德阳市中小学教师全员岗位远程培训教学反思.doc
- 情境教学形成学生问题意识经验简介.doc
- 我的研修规划 公主岭市陶家镇中心小学.doc
- 拓展体态语言评价.doc
- 我身边的教师楷模.doc
- 我的班规.doc
- 挺身式跳远中的挺身动作.doc
- 2023年江苏省镇江市润州区中考生物二模试卷+答案解析.pdf
- 2023年江苏省徐州市邳州市运河中学中考生物二模试卷+答案解析.pdf
- 2023年江苏省苏州市吴中区中考冲刺数学模拟预测卷+答案解析.pdf
- 2023年江苏省南通市崇川区田家炳中学中考数学四模试卷+答案解析.pdf
- 2023年江西省吉安市中考物理模拟试卷(一)+答案解析.pdf
- 2023年江苏省泰州市海陵区九年级(下)中考三模数学试卷+答案解析.pdf
- 2023年江苏省苏州市高新二中中考数学二模试卷+答案解析.pdf
- 2023年江苏省南通市九年级数学中考复习模拟卷+答案解析.pdf
- 2023年江苏省南通市海安市九年级数学模拟卷+答案解析.pdf
- 2023年江苏省泰州市靖江外国语学校中考数学一调试卷+答案解析.pdf
文档评论(0)