多线程读者写者优先实验报告_第1页
多线程读者写者优先实验报告_第2页
多线程读者写者优先实验报告_第3页
多线程读者写者优先实验报告_第4页
多线程读者写者优先实验报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、实验三 多线程编程 实验报告实验目的1、熟悉多线程编程2、熟悉使用信号量机制解决进程同步问题实验内容在 Windows 2000 环境下,创建一个包含 n 个线程的控制台进程。用这n 个线程来表示 n 个读者或写者。 每个线程按相应测试数据文件的要求, 进行读写操作。请用信号量机制分别实现读者优先和写者优先的读者-写者问题。读者优先: 如果一个读者申请进行读操作时已有另一读者正在进行读操作,则该读者可直接开始读操作。写者优先: 如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。实验条件1、为每个学生提供一台具有 WINDOWS 2

2、000/NT/XP 操作系统的计算机;2、实验机器要求安装 Visual C+ 6.0 编程平台;3、实验要求一人一机。四、运行结果显示要求1、要求在每个线程创建、 发出读写操作申请、 开始读写操作和结束读写操作时分别显行提示信息,以确信所有处理都遵守相应的读写操作限制。2、测试数据文件格式:测试数据文件包括 n 行测试数据,分别描述创建的 n个线程各字是读者还是写者, 以及读写操作的开始时间和持续时间。 每行测试数据包括四个字段, 段间用空格分隔。第一字段为一个正整数,表示线程序号。第二字段表示相应线程角色,表示读写表示读者是, W 表示写者。第三字段为一个正数,表示读写操作的开始时间。线程

3、创建后, 延时相应时间(单位为秒)后发出对共享资源的读写申请。第四字段为一个正数, 操作的持续时间。 当线程读写申请成功后, 开始对共享资源的读写操作, 该操作持续相应时3、间后结束,并释放共享资源。下面是一个测试数据文件的例子:若有可能请在图形方式下,将读、写者线程执行情况用图形动画显示五 实验源程序#include #include #include #include #include #include#include#define READER R#define WRITER W/读者/写者#define INTE_PER_SEC 1000#define MAX_THREAD_NUM 6

4、4/定义每秒中断的次数/定义最大线程数#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 ThreadInfoint serial;/ 线程序号char entity;/ 线程类别double delay;/ 线程延迟时间,即开始时间 double persist;/ 线程读写操作时间;

5、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=(D

6、WORD)(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=

7、WaitForSingleObject(s_Mutex,-1); if(readcount=0) EnterCriticalSection(&RP_Write);readcount+;ReleaseMutex(h_Mutex);if (choice=1) LeaveCriticalSection(&RP_Write_Reader);/ ReleaseMutex(s_Mutex);/printf( 读进程 %d 开始读文件 .n,m_serial); cout 读线程 m_serial 开始读文件 endl; Sleep(m_persist);/printf( 读进程 %d 结束读文件 .n,m

8、_serial); cout 读线程 m_serial 结束读文件 .serial;m_delay=(DWORD)(ThreadInfo*)(p)-delay*INTE_PER_SEC); m_persist=(DWORD)(ThreadInfo*)(p)-persist*INTE_PER_SEC);Sleep(m_delay);/cout 写进程 m_serial 发出写请求 *endl; if (choice=1)EnterCriticalSection(&RP_Write_Reader); wait_for_mutex=WaitForSingleObject(s_Mutex,-1); E

9、nterCriticalSection(&RP_Write);cout 写进程 m_serial 开始写文件 endl; Sleep(m_persist);/cout 写进程 m_serial 结束写文件 thread_infon_thread.serial;coutthread_infon_thread.serialthread_infon_thread.entity;coutthread_infon_thread.entitythread_infon_thread.delay;coutthread_infon_thread.delaythread_infon_thread.persist;

10、coutthread_infon_thread+.persistt; inFile.get();coutendl;inFile.close();for(int i=0;i(int)(n_thread);i+) if(thread_infoi.entity=READER|thread_infoi.entity=R)h_Threadi=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_ReaderThread), &thread_infoi,0,&thread_ID);elseh_Threadi=CreateThread(NULL,0,(LPTHREA

11、D_START_ROUTINE)(RP_WriteThread), &thread_infoi,0,&thread_ID); wait_for_all=WaitForMultipleObjects(n_thread,h_Thread,TRUE,-1);cout 所有线程运行完毕 endl;int main()int n;cout输入你的选择:n1:读者优先n2:读者优先n3:退出nn;while(n!=3)switch (n)case 1:choice=0;Read Priority(1.txt);break;case 2:choice=1;Read Priority(1.txt);break;defaultbreak;cout输入你的选择:n1:读者优先n2:写者优先n3:退出nn;system( PAUSE);return 0;六实验结果囤柞系Ifc藝A&fJl经稈IDeIhl理、绘程.MEBun十 十 峡 请娶请隹旻侥 岀如岀岀 ;靠发事发妗豪 112335443 slfissIS i髓諏弱件EW|空写文卜乓睡离结隼笃艾件iir邑八匸4卜程序攜SmS螫备伶第程專I礬程亠SMBpi 6TT =E ipn兀:訐运选先先 sn 进艮读写遇 骂扩箱鮎肚出发求d AUU 5 n 线 a

温馨提示

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

评论

0/150

提交评论