- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
上机注意事项:
1、请不要在网上有哪些信誉好的足球投注网站答案,根据给出的参考代码尽力自己去实现。
2、程序由辅导老师当面检查,随即提问。
3、按照试验一后面的试验报告大纲,完成试验报告(整个课程完成2 个试验报告即可)。交学习委员处,期末考试前统一交给我,按下面的格式。
试验一进程同步
一、实习目的
1、在Windows环境下,利用WinAPI编程实现操作系统经典同步或互斥问题
2、理解和运用信号量、PV操作、进程间互斥和同步关系的基本知识。
3、掌握Windows环境下多线程程序设计方法
二、实习内容
通过对生产者和消费者问题的设计,掌握进程同步和互斥的工作原理。利用信号量的原理和机制去解决同步或互斥问题。
三、实习题目
参考生产者-消费者代码,用信号量机制模拟实现以下问题之一:
1、读者写者问题:有一个许多进程共享的数据区,这个数据区可以是一个文件或者主存的一块空间;有一些只读取这个数据区的进程(Reader)和一些只往数据区写数据的进程(Writer),此外还需要满足以下条件:
任意多个读进程可以同时读这个文件;
一次只有一个写进程可以往文件中写;
如果一个写进程正在进行操作,禁止任何读进程度文件。
提示:需要分两种情况实现该问题:
读优先:要求指一个读者试图进行读操作时,如果这时正有其他读者在进行操作,他可直接开始读操作,而不需要等待。
写优先:一个读者试图进行读操作时,如果有其他写者在等待进行写操作或正在进行写操作,他要等
待该写者完成写操作后才开始读操作。
在Windows2000环境下,创建一个包含n个线程的控制台进程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求,进行读写操作。
2、理发店问题:一个理发店有一个入口和一个出口。理发店内有一个可站5位顾客的站席区、4个单人沙发、3个理发师及其专用理发工具、一个收银台。新来的顾客坐在沙发上等待;没有空沙发时,可在站席区等待;站席区满时,只能在入口外等待。理发师可从事理发、收银和休息三种活动。理发店的活动满足下列条件:
休息的理发师是坐地自己专用的理发椅上,不会占用顾客的沙发;
处理休息状态的理发师可为在沙发上等待时间最长的顾客理发;
理发时间长短由理发师决定;
在站席区等待时间最长的顾客可坐到空闲的理发上;
任何时刻最多只能有一个理发师在收银。
3、哲学家吃面问题:哲学家共餐问题是计算机科学家狄杰斯特拉提出的,问题是这样描述的:5位哲学家围坐在一张圆桌旁,每个人的面前有一碗面条,碗的两旁各有一只筷子(狄杰斯特
拉原来提到的是叉子,因有人习惯用一个叉子吃面条,于是改为中国筷子),如图所示,假设哲学家的生活除了吃饭就是思考问题(这是一种抽象,即对该问题而言其他活动都无关紧要),吃饭的时候需要左手拿一只筷子,右手拿一只筷子,然后开始进餐。吃完后将两只筷子放回原处,继续思考问题。那么,哲学家的生活进程可表示为:
思考问题;
取筷子
进餐;
放下筷子;
重新回到状态⑴思考问题。
四、实习报告
1、试验目的与要求
2、试验内容
3、开发环境
4、分析设计
5、运行结果示例及分析
6、个人收获
7、附录(源程序)
参考代码:生产者-消费者问题:
#includewindows.h#includeiostream
constunsignedshortSIZE_OF_BUFFER=10;//缓冲区长度unsignedshortProductID=0; //产品号
unsignedshortConsumeID=0; //将被消耗的产品号unsignedshortin=0; //产品进缓冲区时的缓冲区下标unsignedshortout=0; //产品出缓冲区时的缓冲区下标
intg_buffer[SIZE_OF_BUFFER]; //缓冲区是个循环队列boolg_continue=true; //控制程序结束
HANDLEg_hMutex; //用于线程间的互斥
HANDLEg_hFullSemaphore; //当缓冲区满时迫使生产者等待HANDLEg_hEmptySemaphore; //当缓冲区空时迫使消费者等待
DWORDWINAPIProducer(LPVOID); //生产者线程DWORDWINAPIConsumer(LPVOID); //消费者线程
intmain()
{
//创建各个互斥信号
g_hMutex=CreateMutex(NULL,FALSE,NULL);
g_hFullSemaphore=CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL);g_hEm
您可能关注的文档
最近下载
- 工作疏忽大意深刻失职检讨书5000字.doc
- 无处不生活 无处不教育——“生活即教育”思想在小学语文课堂中的渗透 论文.docx
- 2021年全国中小学生天文知识竞赛试题库(一).pdf
- 部编版语文五年级上册第六单元习作《我想对您说》课件.pptx VIP
- 整式的乘法与因式分解单元教学设计.docx VIP
- 2024年中考语文专项复习 现代文阅读知识点.pptx VIP
- 2024年山东日照市事业单位招聘考试(市属+各县区)【综合基础知识500题】高频考点模拟试题及参考答案解析.docx
- 2024新人音版初中七级音乐上册《第五单元 草原牧歌》大单元整体教学设计.docx
- 中国隐形眼镜品牌及广告概述.ppt
- 初中作文指导:一多用(材料的移花接木法).ppt VIP
文档评论(0)