计算机操作系统实验程序仅供参考_第1页
计算机操作系统实验程序仅供参考_第2页
免费预览已结束,剩余1页可下载查看

付费下载

下载本文档

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

文档简介

1、#include stdafx.h #include windows.h #include #include #include #include #include #include #define READER R#define WRITER W/读者/写者/每秒时钟中断的数目/最大线程数/最大文件数目数/字符串的长度#defineE_PER_SEC 1000#define MAX_THREAD_NUM 64#define MAX_FILE_NUM 32#define MAX_STR_LEN 32readcount=0;/读者数目writecount=0;/写者数目CRITICAL_SECTI

2、ON RP_Write;CRITICAL_SECTION cs_Write; CRITICAL_SECTION cs_Read;/临界资源struct ThreadInfoserial; char entity; double delay;double persist;/线程序号/线程类别(判断是读者还是写者线程)/线程延迟时间/线程读写操作时间/读者优先-读者线程/P:读者线程信息void RP_ReaderThread(void *p)/互斥变量 HANDLE h_Mutex;h_Mutex=OpenMutex(MUTEX_ALL_ACS,FALSE,mutex_for_readcount

3、);DWORD wait_for_mutex;DWORD m_delay;/等待互斥变量所/延迟时间DWORD m_persist;m_serial;/读文件持续时间/线程序号/从参数中获得信息m_serial=(ThreadInfo*)(p)-serial ; m_delay=(DWORD)(ThreadInfo*)(p)-delay *E_PER_SEC);m_persist=(DWORD)(ThreadInfo*)(p)-persist *E_PER_SEC);Sleep(m_delay);/延迟等待pf(读线程 %d 发出读请求.n,m_serial);/等待互斥信号,保证对 Read

4、Count 的,修改互斥wait_for_mutex=WaitForSingleObject(h_Mutex,-1);/读者数目增加readcount+; if(readcount=1)/第一个读者,等待资源EnterCriticalSection(&RP_Write);ReleaseMutex(h_Mutex);/读文件/互斥信号pf(读线程 %d 开始读文件.n,m_serial);Sleep(m_persist);/退出线程pf(读线程 %d 结束读文件.n,m_serial);/等待互斥信号,保证对 ReadCount 的,修改互斥wait_for_mutex=WaitForSingl

5、eObject(h_Mutex,-1);/读者数目减少 readcount-; if(readcount=0)/如果所有的读者读完,唤醒写者 LeaveCriticalSection(&RP_Write);ReleaseMutex(h_Mutex);/互斥信号/读者优先-写者线程/P:写者线程信息void RP_WriterThread(void *p)DWORD m_delay; DWORD m_persist;m_serial;/延迟时间/写文件持续时间/线程序号/从参数中获得信息 m_serial=(ThreadInfo*)(p)-serial ; m_delay=(DWORD)(Thr

6、eadInfo*)(p)-delay * m_persist=(DWORD)(ThreadInfo*)(p)-persist *Sleep(m_delay);E_PER_SEC);E_PER_SEC);pf(写线程 %d 发出写请求*.n,m_serial);/等待资源EnterCriticalSection(&RP_Write);/写文件pf(写线程 %d 开始写文件.n,m_serial);Sleep(m_persist);/退出线程pf(写线程 %d 结束写文件.n,m_serial);/资源LeaveCriticalSection(&RP_Write);/读者优先处理函数void Re

7、adriority(char *file)DWORD n_thread=0; DWORD thread_ID;DWORD wait_for_all;/线程数目/线程 ID/等待所有线程结束/互斥对象 HANDLE h_Mutex;h_Mutex=CreateMutex(NULL,FALSE,mutex_for_readcount);/线程对象的数组HANDLE h_ThreadMAX_THREAD_NUM;ThreadInfo thread_infoMAX_THREAD_NUM;readcount=0;/初始化 readcountInitializeCriticalSection(&RP_Wr

8、ite); ifstream inFile;inFile.open (file);/初始化临界区pf(读者优先:nn);while(inFile)/读入每一个读者,写者的信息 inFilethread_infon_thread.serial; inFilethread_infon_thread.entity; inFilethread_infon_thread.delay; inFilethread_infon_thread+.persist; inFile.get();for(i=0;i()(n_thread);i+)if(thread_infoi.entity=READER|thread_

9、infoi.entity =r)/创建读者进程h_Threadi=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_ReaderThread),&thr ead_infoi,0,&thread_ID);else/创建写线程h_Threadi=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(RP_WriterThread),&thre ad_infoi,0,&thread_ID);/等待所有的线程结束 wait_for_all=WaitForMultipleObjects(n_thread,h_Thread,TRUE,-1);/prf(A

温馨提示

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

评论

0/150

提交评论