第一范文网 - 专业文章范例文档资料分享平台

进程同步模拟设计 - 读者和写者问题

来源:用户分享 时间:2025/5/25 21:19:06 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

读者写者问题的定义如下:有一个许多进程共享的数据区,这个数据区可以 是一个文件或者主存的一块空间;有一些只读取这个数据区的进程(Reader)和 一些只往数据区写数据的进程(Writer),此外还需要满足以下条件: (1) 任意多个读进程可以同时读这个文件; (2)一次只有一个写进程可以往文件中写;

(3)如果一个写进程正在进行操作,禁止任何读进程度文件. 我们需要分两种情况实现该问题:

读优先:要求指一个读者试图进行读操作时,如果这时正有其他读者在进行操作,他可直接开始读操作,而不需要等待.

写优先:一个读者试图进行读操作时,如果有其他写者在等待进行写操作或 正在进行写操作,他要等待该写者完成写操作后才开始读操作.

2.3设计分析

在 Windows xp 环境下,创建一个包含 n 个线程的控制台进程.用这 n 个

线程来表示 n 个读者或写者. 每个线程按相应测试数据文件的要求, 进行读写操作. 请用信号量机制分别实现读者优先和写者优先的读者-写者问题. 读者-写者问题的读写操作限制:

读者-写者的读写限制(包括读者优先和写者优先) 1)写-写互斥,即不能有两个写者同时进行写操作

2)读-写互斥,即不能同时有一个读者在读,同时却有一个写者在写 3)读读允许,即可以有 2 个以上的读者同时读

将所有的读者和所有的写者分别放进两个等待队列中, 当读允许时就让读者 队列释放一个或多个读者,当写允许时,释放第一个写者操作.读者写者问题的 定义如下:有一个许多进程共享的数据区,这个数据区可以是一个文件或者主存 的一块空间;有一些只读取这个数据区的进程(Reader)和一些只往数据区写数 据的进程(Writer),此外还需要满足以下条件:1)任意多个读进程可以同时读这 个文件;2) 一次只有一个写进程可以往文件中写;3)如果一个写进程正在进行操作,禁止任何读进程度文件.

3开发平台及源程序主要部分

3.1开发平台

Windows xp 系统下,VC++6.0开发 3.2源程序主要部分

结构体_Person如下 {

HANDLE m_hThread;//定义处理线程的句柄 int m_nType;//进程类型(读写) int m_nStartTime;//开始时间 int m_nWorkTime;//运行时间 int m_nID;//进程号 typedef struct _Person

}Person;

main()函数(主线程)

创建信号灯,当前可用的资源数为 1,最大为 100 : g_hReadSemaphore = CreateSemaphore(NULL,1,100,NULL)g_hWriteSemaphore = CreateSemaphore(NULL,1,100,NULL)

调用CreatePersonList()函数,设置线程同步间隔为1000ms,计算时间片。

CreatePersonList(int *pPersonLists)函数

根据*pPersonLists队列创建读者/写者。

CreateReader(int StartTime,int WorkTime,int ID)函数

创建与读者有关的线程,并初始化g_Persons [g_NumPerson]

CreateWriter(int StartTime,int WorkTime,int ID)函数

创建与写者有关的线程,并初始化g_Persons [g_NumPerson]

DWORD WINAPI ReaderProc(LPVOID lpParam)和DWORD WINAPI WriterProc(LPVOID lpParam)

分别与读者和写者对应的辅助线程函数。

3.3程序流程图

WriterProc() CreateWriter() W Main() CreatePersonList() R CreateReader() ReaderProc() 退出

4 测试用例和运行结果

4.1测试用例

int g_PersonLists[] = { 1, W,1,3, 2, W,3,1, 3, R,10,2, 4, W,6,3, 5, R,7,5, 6, R,9,1, END, };

4.2运行结果

4.3运行结果分析

进程1是写操作,在时间片1进入队列,运行时间3,在它进入时没有进程占用资源,立即占用资源,直到释放资源。在它占用资源时等待的进程有:2

进程2是写操作,在时间片3进入队列,运行时间1,由于进程1在占用资

源,所以等待进程1释放资源。在它占用资源时没有等待的进程

进程3是读操作,在时间片10进入队列,运行时间2,此时读者5在占用资

源,但由于可以多个读者同时阅读,所以读者3也可以阅读

进程4是写操作,在时间片6进入队列,运行时间3,此时没有进程占用资

源,它可以立即占用资源,直到结束并释放资源。在它占用资源时等待的进程有:5,6

进程5是读操作,在时间片7进入队列,运行时间5,由于此时进程4在占

用资源,所以等待进程4释放资源。

搜索更多关于: 进程同步模拟设计 - 读者和写者问题 的文档
进程同步模拟设计 - 读者和写者问题.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c82ui410kzw1symv1jbqw_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top