- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《操作系統》课程设计报告
《操作系统》课程设计报告
一、读者/写者的问题模拟实现
读者/写者问题,是指保证一个 writer 进程必须与其他进程互斥地访问共享对象的同步问题。 读者写者问题可以这样的描述:有一群写者和一群读者,写者在写同一本书,读者也在读这本书,多个读者可以同时读这本书,但是只能有一个写者在写书,并且读者必优先,也就是说,读者和写者同时提出请求时,读者优先。当读者提出请求时,需要有一个互斥操作,另外需要有一个信号量 S 来确定当前是否可操作。 信号量机制是支持多道程序的并发操作系统设计中解决资源共享时进程间的同步与互斥的重要机制,而读者写者则是这一机制的一个经典范例。与记录型信号量解决读者——写者问题不同,信号量机制它增加了一个限制,即最多允许 RN 个读者同时读。为此,又引入了一个信号量 L,并赋予初值为 RN,通过执行 wait (L,1,1)操作来控制读者的数目,每当有一个读者进入时,就要执行wait(L,1,1)操作,使 L 的值减 1。当有 RN 个读者进入读后,L 便减为 0,第 RN+1 个读者要进入读 时,必然会因 wait(L,1,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 WRITER
typedef struct _Person
{
HANDLE m_hThread;//定义处理线程的句柄
int m_nType;//进程类型(读写)
int m_nStartTime;//开始时间
int m_nWorkTime;//运行时间
int m_nID;//进程号
}Person;
Person g_Persons[MAX_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_NumOfWriteRequest = 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 WINAPI ReaderProc(LPVOID lpParam);
DWORD WINAPI WriterProc(LPVOID lpParam);
int main()
{
g_hReadSemaphore = CreateSemaphore(NULL,1,100,NULL); //创建信号灯,当前可用的资源数为1,最大为100
g_hWriteSemaphore = CreateSemaphore(NULL,1,100,NULL); //创建信号灯,当前可用的资源数为1,最大为100
CreatePersonList(g_PersonLists); // Create All the reader and writers
printf(Created all the reader and writer\n 创建\n);
g_CurrentTime = 0;
while(true)
{
g_CurrentTime++;
Sleep(300); // 300 ms
printf(CurrentTime = %d\n,g_CurrentTime);
if(finished)
您可能关注的文档
最近下载
- 起重作业安全生产管理教材.ppt VIP
- 2017年0916离任审计业务约定书模板.doc
- 2023年四川省公需科目(数字经济与驱动发展)考试题库及答案.pdf VIP
- 抒情与写意——文人画.pptx VIP
- 人教版一年级数学上册第五单元分层作业设计 .pdf
- 国标结构专业图集 - 15G611 砖混结构加固与修复.pdf
- 全国青少年软件编程(scratch)等级考试试卷(二级)及答案.pdf VIP
- 2024年大学试题(计算机科学)-网络工程设计与系统集成笔试考试历年真题荟萃含答案.docx
- 小学六年级下册音体美综合测试题汇编19-56-31-597.docx VIP
- 资产评估-第四章房档呢产价格评估1.ppt
文档评论(0)