- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
多线程读者写者优先实验报告
实验三 多线程编程 实验报告
实验目的
熟悉多线程编程
熟悉使用信号量机制解决进程同步问题
实验内容
在Windows 2000 环境下,创建一个包含n 个线程的控制台进程。用这n 个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求,进行读写操作。请用信号量机制分别实现读者优先和写者优先的读者-写者问题。
读者优先:如果一个读者申请进行读操作时已有另一读者正在进行读操作,则该读者可直接开始读操作。
写者优先:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。
实验条件
1、为每个学生提供一台具有WINDOWS 2000/NT/XP操作系统的计算机;
2、实验机器要求安装Visual C++ 6.0编程平台;
3、实验要求一人一机。
运行结果显示要求
要求在每个线程创建、发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确信所有处理都遵守相应的读写操作限制。
测试数据文件格式:测试数据文件包括n 行测试数据,分别描述创建的n 个线程是读者还是写者,以及读写操作的开始时间和持续时间。每行测试数据包括四个字段,各字段间用空格分隔。第一字段为一个正整数,表示线程序号。第二字段表示相应线程角色,R 表示读者是,W 表示写者。第三字段为一个正数,表示读写操作的开始时间。线程创建后,延时相应时间(单位为秒)后发出对共享资源的读写申请。第四字段为一个正数,表示读写操作的持续时间。当线程读写申请成功后,开始对共享资源的读写操作,该操作持续相应时间后结束,并释放共享资源。下面是一个测试数据文件的例子:
1 R 3 5
2 W 4 5
3 R 5 2
4 R 6 5
若有可能请在图形方式下,将读、写者线程执行情况用图形动画显示
五 实验源程序
#includewindows.h
#includeconio.h
#includestdlib.h
#includefstream.h
#includeio.h
#includestring.h
#includestdio.h
#define READER R //读者
#define WRITER W //写者
#define INTE_PER_SEC 1000 //定义每秒中断的次数
#define MAX_THREAD_NUM 64 //定义最大线程数
#define MAX_FILE_NUM 32 //定义最大文件数目
#define MAX_STR_LEN 32 //
int readcount=0; //
int writecount=0; //
CRITICAL_SECTION RP_Write; //临界资源
CRITICAL_SECTION RP_Write_Reader; //临界资源
int choice=0;
struct ThreadInfo
{
int serial;//线程序号
char entity;//线程类别
double delay;//线程延迟时间,即开始时间
double persist;//线程读写操作时间
};
void RP_ReaderThread (void *p)
{
HANDLE h_Mutex;
// HANDLE s_Mutex;
// s_Mutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,mutex_for_readORwriter);
h_Mutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,mutex_for_readcount);
DWORD wait_for_mutex;
DWORD m_delay;
DWORD m_persist;
int m_serial;
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(读线程%d发出请求.\n,m_serial);
cout读线程m_serial发出读请求endl;
if (choice==1)
{
EnterCriticalSection(RP_Write_Reader);
}
wait_for_mutex=WaitForSingleObject(h_Mutex,-1);
// wait_for_mutex=WaitFor
您可能关注的文档
- 外国人写的logo设计创意教程.doc
- 外国传媒集团在中国的发展现状.ppt
- 外国儿童文学下编 下编教学思路 外国优秀的儿童文学作家作品非常多.doc
- 外 国 民 歌 欣 赏.ppt
- 夏日活 动 策 划 方 案.doc
- 外国古典家具文化艺术.doc
- 外商投资企业设立申请表 - 企业名称.doc
- 外国工艺美术史教案——山东艺术学院荆雷 古代埃及 一、时间界定: 从 .doc
- 外国教育史 夸美纽斯的教育.ppt
- 外国文学-古希腊悲剧.ppt
- 《GB/T 32151.42-2024温室气体排放核算与报告要求 第42部分:铜冶炼企业》.pdf
- GB/T 32151.42-2024温室气体排放核算与报告要求 第42部分:铜冶炼企业.pdf
- GB/T 38048.6-2024表面清洁器具 第6部分:家用和类似用途湿式硬地面清洁器具 性能测试方法.pdf
- 中国国家标准 GB/T 38048.6-2024表面清洁器具 第6部分:家用和类似用途湿式硬地面清洁器具 性能测试方法.pdf
- 《GB/T 38048.6-2024表面清洁器具 第6部分:家用和类似用途湿式硬地面清洁器具 性能测试方法》.pdf
- 《GB/T 18238.2-2024网络安全技术 杂凑函数 第2部分:采用分组密码的杂凑函数》.pdf
- GB/T 18238.2-2024网络安全技术 杂凑函数 第2部分:采用分组密码的杂凑函数.pdf
- 《GB/T 17215.686-2024电测量数据交换 DLMS/COSEM组件 第86部分:社区网络高速PLCISO/IEC 12139-1配置》.pdf
- GB/T 13542.4-2024电气绝缘用薄膜 第4部分:聚酯薄膜.pdf
- 《GB/T 13542.4-2024电气绝缘用薄膜 第4部分:聚酯薄膜》.pdf
文档评论(0)