多线程读者写者优先实验报告.doc

上传人:啊飒飒 文档编号:10599958 上传时间:2021-05-25 格式:DOC 页数:7 大小:92KB
返回 下载 相关 举报
多线程读者写者优先实验报告.doc_第1页
第1页 / 共7页
多线程读者写者优先实验报告.doc_第2页
第2页 / 共7页
多线程读者写者优先实验报告.doc_第3页
第3页 / 共7页
多线程读者写者优先实验报告.doc_第4页
第4页 / 共7页
多线程读者写者优先实验报告.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《多线程读者写者优先实验报告.doc》由会员分享,可在线阅读,更多相关《多线程读者写者优先实验报告.doc(7页珍藏版)》请在三一文库上搜索。

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

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

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

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

5、e 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)-s

6、erial;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_mut

7、ex=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_serial); cout读

8、线程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);EnterCriticalSection(&RP_Wri

9、te);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;coutthread_infon_thread+.persistt;inF

10、ile.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,(LPTHREAD_START_ROUTINE)(RP_WriteThread),&thread

11、_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;ReadPriority(1.txt);break;case 2:choice=1;ReadPriority(1.txt);break;default:break;cout输入你的选择:n1:读者优先n2:写者优先n3:退出nn;system(PAUSE);return 0;六 实验结果首先选择读者优先,第一次选择,把读入的文件信息输出选择写者优先:七 实验总结由于此实验用到API函数,自己不知道,所以上网搜索一些关于线程的API函数,又通过查阅一些参考书,逐渐掌握了多线程编程及其函数应用。通过此实验掌握了使用信号量机制解决进程同步问题的方法。

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

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1