实验三:生产者与消费者一、 实验目的1.学习和掌握操作系统中进程之间的通信;2.理解和掌握使用信号量机制来是想进程之间的同步和互斥;3.学习使用创建文件对象,并利用文件映射对象来实现数据通信。二、实验内容?一个大小为 6 的缓冲区,初始为空,每个缓冲区能存放一个长度若为10个字符的字符串。?2 个生产者–随机等待一段时间,往缓冲区添加数据,–若缓冲区已满,等待消费者取走数据后再添加–重复 12 次?3 个消费者–随机等待一段时间,从缓冲区读取数据–若缓冲区为空,等待生产者添加数据后再读取–重复 8 次说明:?显示每次添加和读取数据的时间及缓冲区的状态?生产者和消费者用进程模拟,缓冲区用共享内存来实现三、 实验环境1. Windows 下:Windows8 ,Visual studio 2013 2. Linux 下:Linux Ubuntu 4,gcc 四、 程序设计与实现1.Windows 下:A. 主要函数说明:(1) PROCESS_INFORMATIONStartClone(intnCloneID) 功能:用来创建 5 个相同的进程, 前两个为生产者, 后三两个为消费者,赋予其不同的ID 值,返回进程的信息。(2) CreateSemaphore();功能:创建 3 个信号量: full ,empty,mutex。来互斥的访问缓冲区,实现通信。(3) CreateFileMapping()功能:在当前运行的进程中创建文件映射对象,来模拟共享缓冲区MapViewOfFile()功能:在此文件映射上创建视图映射到当前应用程序的地址空间B. 程序流程图开始实验代码如下:Windows :pp : 定义控制台应用程序的入口点。初始化 : 创建的子进程个数为0 nClone=0; 创建 3 个信号量:full ,empty,mutex 创建共享内存创建 5 个相同的子进程nClone++ nClone= 申请缓冲区P(empty) P(mutex) 把 产 品 放 入 缓 冲区:将 0 置为 1 释放缓冲区:V(mutex) V(full) 随机等待12 次 放完了申请缓冲区P(full) P(mutex) 从 缓 冲 区 取 产品:将 1 置为 0 释放缓冲区:V(mutex) V(empty) 随机等待12次 取完了等 待 子 进 程 执 行完毕结束每个子进程结束0