试验一 并发进程.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

tianya189 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档