下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include <windows.h>#include <ctype.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <malloc.h>#define MAX_PERSON 100#define READER 0 /读者#define WRITER 1 /写者#define END -1#define R READER#define W WRITERtypedef struct _PersonHANDLE m_hThread;/定义处
2、理线程的句柄int m_nType;/进程类型(读写)int m_nStartTime;/开始时间int m_nWorkTime;/运行时间int m_nID;/进程号Person;Person g_PersonsMAX_PERSON;int g_NumPerson = 0;long g_CurrentTime= 0;/基本时间片数int g_PersonLists = /进程队列1, W, 3, 5, 2, W, 16, 5, 3, R, 5, 2,4, W, 6, 5, 5, R, 4, 3, 6, R, 17,7,END,;int g_NumOfReading = 0;int g_Num
3、OfWriteRequest = 0;/申请写进程的个数HANDLE g_hReadSemaphore;/读者信号HANDLE g_hWriteSemaphore;/写者信号bool finished = false; /所有的读完成/bool wfinished = false; /所有的写完成void CreatePersonList(int *pPersonList);bool CreateReader(int StartTime,int WorkTime,int ID);bool CreateWriter(int StartTime,int WorkTime,int ID);DWORD
4、 WINAPI ReaderProc(LPVOID lpParam);DWORD WINAPI WriterProc(LPVOID lpParam);int main()g_hReadSemaphore = CreateSemaphore(NULL,1,100,NULL); /创建信号灯,当前可用的资源数为1,最大为100g_hWriteSemaphore = CreateSemaphore(NULL,1,100,NULL); /创建信号灯,当前可用的资源数为1,最大为100CreatePersonList(g_PersonLists); / Create All the reader and
5、 writersprintf("创建所有读者写者n");g_CurrentTime = 0;while(true)g_CurrentTime+;Sleep(300); / 300 msprintf("当前时间 = %dn",g_CurrentTime);if(finished) return 0; / return 0;void CreatePersonList(int *pPersonLists)int i=0;int *pList = pPersonLists;bool Ret;while(pList0 != END)switch(pList1)ca
6、se R:Ret = CreateReader(pList2,pList3,pList0);/351,w452,523,654break; case W:Ret = CreateWriter(pList2,pList3,pList0);break;if(!Ret)printf("创建 %d 错误n",pList0);pList += 4; / move to next person listDWORD WINAPI ReaderProc(LPVOID lpParam)/读过程Person *pPerson = (Person*)lpParam;/ wait for the
7、start timewhile(g_CurrentTime != pPerson->m_nStartTime) printf("读者 %d 正在请求n",pPerson->m_nID);printf("nn*n");/ wait for the write requestWaitForSingleObject(g_hReadSemaphore,INFINITE); if(g_NumOfReading =0)WaitForSingleObject(g_hWriteSemaphore,INFINITE); g_NumOfReading+;Rele
8、aseSemaphore(g_hReadSemaphore,1,NULL);pPerson->m_nStartTime = g_CurrentTime;printf("读者 %d 正在读取共享缓冲区n",pPerson->m_nID);printf("nn*n");while(g_CurrentTime <= pPerson->m_nStartTime + pPerson->m_nWorkTime)printf("读者 %d 正在退出n",pPerson->m_nID);printf("n
9、n*n");WaitForSingleObject(g_hReadSemaphore,INFINITE);g_NumOfReading-;if(g_NumOfReading = 0)ReleaseSemaphore(g_hWriteSemaphore,1,NULL);/此时没有读者,可以写ReleaseSemaphore(g_hReadSemaphore,1,NULL);if(pPerson->m_nID = 4) finished = true; /所有的读写完成ExitThread(0);return 0;DWORD WINAPI WriterProc(LPVOID lpP
10、aram)Person *pPerson = (Person*)lpParam;/ wait for the start timewhile(g_CurrentTime != pPerson->m_nStartTime)printf("写者 %d 正在请求进行写操作n",pPerson->m_nID);printf("nn*n");WaitForSingleObject(g_hWriteSemaphore,INFINITE);/ modify the writer's real start timepPerson->m_nSta
11、rtTime = g_CurrentTime;printf("写者 %d 正在向共享缓冲区写内容n",pPerson->m_nID);while(g_CurrentTime <= pPerson->m_nStartTime + pPerson->m_nWorkTime)printf("写者 %d 正在退出n",pPerson->m_nID);printf("nn*n");/g_NumOfWriteRequest-;ReleaseSemaphore(g_hWriteSemaphore,1,NULL);if(
12、pPerson->m_nID = 4) finished = true;/所有的读写完成ExitThread(0);return 0;bool CreateReader(int StartTime,int WorkTime,int ID)DWORD dwThreadID;if(g_NumPerson >= MAX_PERSON)return false;Person *pPerson = &g_Personsg_NumPerson;pPerson->m_nID = ID;pPerson->m_nStartTime = StartTime;pPerson->
13、m_nWorkTime = WorkTime;pPerson->m_nType = READER;g_NumPerson+;/ Create an New ThreadpPerson->m_hThread= CreateThread(NULL,0,ReaderProc,(LPVOID)pPerson,0,&dwThreadID);if(pPerson->m_hThread = NULL)return false;return true;bool CreateWriter(int StartTime,int WorkTime,int ID)DWORD dwThreadID;if(g_NumPerson >= MAX_PERSON)return false;Person *pPerson = &g_Personsg_NumPerson;pPerson->m_nID = ID;pPerson->m_nStartTime = StartTime;pPerson->m_nWorkTime = WorkT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit 5 Here and Now单元测试卷 (含答案)2025-2026学年人教版七年级英语下册
- 湖南省2026届九年级中考模拟练习物理试卷
- 广东省深圳市期末巩固卷-2025-2026学年数学五年级上册(北师大版)
- 山东省滨州邹平市某中学2025-2026学年七年级下学期语文期末模拟试卷(含答案)
- 网络和基础保护 3
- 2026人工智能芯片制造行业供需现状与发展战略研究
- 2026生猪养殖产业链供需分析投资前景评估规划研究分析报告
- 2026中国塑料制造行业市场供需动态演变及投资策略规划设计研究报告
- 2026煤化工行业政策环境分析投资价值评估发展趋势规划深度研究
- 2026汽车共享行业市场潜力挖掘及面临的政策监管问题应对措施与商业模式创新报告
- 车间厂房租赁协议书范本
- 防洪防汛救灾应急预案
- 燃气管道及设施保护专项方案
- 装修木工施工合同范例
- 调查课件城市规划社会调查的基本类型
- (正式版)HGT 6313-2024 化工园区智慧化评价导则
- 商贸有限公司产品质量管理制度
- 电路分析基础(第5版)PPT完整全套教学课件
- 2022年08月中国国新控股有限责任公司公开招聘国新证券总经理笔试题库含答案解析
- FZ/T 70010-2006针织物平方米干燥重量的测定
- 阿特拉斯使用说明书(全) - 图文-
评论
0/150
提交评论