付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)《GBT 30095-2013网络化制造环境中业务互操作协议与模型》
- 深度解析(2026)《GBT 30033-2013拆船管理系统 船上有害物质位置示意图》
- 期中教学质量分析会校长讲话:这段话说到了老师们心坎上-“教学工作最怕的不是出了问题而是问题已经出现了我们却没及时看见”
- 原发性肝癌全程管理专家共识科普版总结2026
- 《GBT 4654-2008非金属基体红外辐射加热器通 用技术条件》(2026年)合规红线与避坑实操手册
- 《GBT 2888-2008风机和罗茨鼓风机噪声测量方法》(2026年)合规红线与避坑实操手册
- 《FZT 07039-2024节水型企业 毛纺织企业》(2026年)合规红线与避坑实操手册
- 《CJT 439-2013单体浇铸增强尼龙管材和管件》(2026年)合规红线与避坑实操手册
- 广东省阳江市阳西县2025年中考二模英语试题(含答案)
- 年产3000万只大排量摩托车火花塞生产线技改项目可行性研究报告模板-立项拿地
- 大米采购框架合同协议
- 2025北京市人力资源和社会保障局劳动合同样本
- 高速公路服务区服务管理规范
- CCMD3中国精神障碍分类及诊断标准
- DB11T 1927-2021 建设项目环境影响评价技术指南 医疗机构
- 鲁教版五四制七年级数学下册全套教案
- DL∕T 5370-2017 水电水利工程施工通 用安全技术规程
- 发动机教案课件
- (正式版)HGT 22820-2024 化工安全仪表系统工程设计规范
- 十字路口交通灯控制设计-十字路口交通灯控制设计(PLC设计课件)
- 活塞式压缩机设计大作业
评论
0/150
提交评论