- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三:生产者与消费者
实验目的
1.学习和掌握操作系统中进程之间的通信;
2.理解和掌握使用信号量机制来是想进程之间的同步和互斥;
3.学习使用创建文件对象,并利用文件映射对象来实现数据通信。
二、实验内容
一个大小为6的缓冲区,初始为空,每个缓冲区能存放一个长度若为10个字符的字符串。
2个生产者
随机等待一段时间,往缓冲区添加数据,
若缓冲区已满,等待消费者取走数据后再添加
重复12次
3个消费者
随机等待一段时间,从缓冲区读取数据
若缓冲区为空,等待生产者添加数据后再读取
重复8次
说明:
显示每次添加和读取数据的时间及缓冲区的状态
生产者和消费者用进程模拟,缓冲区用共享内存来实现
实验环境
Windows下:
Windows8 ,Visual studio 2013
Linux下:
Linux Ubuntu 4,gcc
程序设计与实现
Windows下:
主要函数说明:
PROCESS_INFORMATIONStartClone(intnCloneID)
功能:用来创建5个相同的进程,前两个为生产者,后三两个为消费者,赋予其不同的ID值,返回进程的信息。
CreateSemaphore();
功能:创建3个信号量:full,empty,mutex。来互斥的访问缓冲区,实现通信。
CreateFileMapping()
功能:在当前运行的进程中创建文件映射对象,来模拟共享缓冲区
MapViewOfFile()
功能:在此文件映射上创建视图映射到当前应用程序的地址空间
程序流程图
开始
初始化:
创建的子进程个数为0
nClone=0;
创建5个相同的子进程
nClone++
2nClone6
0nClone3
申请缓冲区
P(full)
P(mutex)
申请缓冲区
P(empty)
P(mutex)
nClone=?
0
从缓冲区取产品:将1置为0
创建3个信号量:
full ,empty,mutex
把产品放入缓冲区:将0置为1
释放缓冲区:
V(mutex)
V(empty)
释放缓冲区:
V(mutex)
V(full)
创建共享内存
N
N
随机等待
随机等待
等待子进程执行完毕
12次取完了?
12次放完了?
Y
Y
结束每个子进程
结束
实验代码如下:
Windows:
// 实验三.cpp : 定义控制台应用程序的入口点。
//
#include stdafx.h
#include stdio.h
#include windows.h
#include time.h
static HANDLE hMutexMapping=INVALID_HANDLE_VALUE;
int num=0;
HANDLE lpHandle[10];
struct buf
{
int num;
int read;
int write;
int buffer[5];
};
BOOL StartClone()
{
int i;
BOOL bCreateOK;
PROCESS_INFORMATION pi;
TCHAR szFilename[MAX_PATH];
GetModuleFileName(NULL,szFilename,MAX_PATH);
TCHAR szCmdLine[MAX_PATH];
for ( i = 0; i 3; i++)
{
sprintf(szCmdLine,\%s\ consumer %d,szFilename,i);
STARTUPINFO si;
ZeroMemory(reinterpret_castvoid *(si),sizeof(si));
si.cb=sizeof(si);
bCreateOK=CreateProcess(
szFilename,
szCmdLine,
NULL,
NULL,
FALSE,
CREATE_DEFAULT_ERROR_MODE,
NULL,
NULL,
si,
pi);
if (!bCreateOK)
{
您可能关注的文档
最近下载
- 《小学四年级期末家长会》课件模板(五套).pptx
- SY∕T 4204-2019 石油天然气建设工程施工质量验收规范 油气田集输管道工程.pdf
- 国开开放系统22422《汽车发动机构造与维修》期末机考真题及答案(第101套).pdf
- 河南中宜创芯发展有限公司年产1000吨电子级高纯碳化硅粉体项目(一期)环境影响报告书.pdf
- 缓速器电控系统培训0413.ppt VIP
- 2024年“七一”专题党课讲稿:做一名合格共产党员.docx VIP
- 大厦加装电梯项目工程钢结构吊装专项施工方案.doc VIP
- 降低老年患者功能性便秘发生率.pptx
- 红星照耀中国阅读计划.docx
- 2024年党纪学习教育ppt(党课).pptx VIP
文档评论(0)