生产者消费者实验报告

更新时间:2023-06-18 14:06:17 阅读: 评论:0

实验二.生产者与消费者进程实验报告十二天干
实验目的:
利用Windows提供的API函数,编写程序,解决生产者与消费者问题,实现进程的互斥与同步。
实验内容与步骤:
1.进程的互斥与同步。编写一段程序,模拟生产者和消费者线程,实现进程的互斥与同步。
2.利用VC++6.0实现上述程序设计和调试操作,对于生产者和消费者线程操作的成功与否提供一定的提示框。
3.通过阅读和分析实验程序,熟悉进程的互斥与同步的概念。
程序设计思路:
关于这个生产者与消费者进程,我主要设计了两个线程,一个生产者线程,一个消费者线程。整个进程随着这两个线程的创建,运行,终止而进行。
在程序的开始,首先我创建了一个结构struct,它包括的基本数据有:生产物品缓冲区(用队列来表示),一个标志缓冲区空间多少的信号量m_S_Empty,一个标志缓冲区已有物品多少的信号量m_S_Full,一个互斥信号量m_M_Mutex防止生产者与消费者同时访问缓冲区间,一个判断生产者是否要结束生产的bool类型标志producerfinished,若为true,则两个线程都终止。
进入主程序以后,首先对这些struct中的基本数据进行一个个赋值,然后创建生产者与消费者两个线程,等待两个线程都结束时,关闭进程。
要知道在main主函数中两个线程的创建语句就是对两个线程各自进入函数的运行,生产者函数中通过一个for循环,可以控制生产者进行多次生产,不是生产一次就结束了。消费者函数中通过一个while循环,当生产者没有结束生产时可以控制消费者进行多次消费,不是消费一次就不会再来消费了,除非生产者已结束生产,即producerfinished的值变为true。
实验主要程序及注释:
#include "stdafx.h"
道家传承系统
#include <windows.h>
#include <iostream>
#include <queue>
新员工培训总结#include <process.h>
using趣的成语 namespace std;
DWORD WINAPI Consumer(void*);//声明消费者函数
DWORD WINAPI Producer(void*);//声明生产者函数
#define N 10//定义缓冲区数量
/*数据结构的定义*/
struct MyData{
HANDLE m_S_Empty;// 生产者Semaphore
HANDLE m_S_Full; // 消费者Semaphore
HANDLE m_M_Mutex;//互斥信号量
傅雷家书读后感600queue<int> food; //定义共享缓冲区
bool producerfinished;//标志着生产者是否结束生产
};
int j=0;//只是为了输出方便观察线程执行次数
int main()
/*对各个信号量赋值*/
MyData mydata;//创建一个MyData数据类型的实体mydata
mydata.m_M_Mutex = CreateMutex(NULL, fal, NULL);//"fal"表示刚刚创建的这个信号量不属于®¨²任何线程
mydata.m_S_Empty = CreateSemaphore(NULL, N, N, NULL);//初始计数为N
  mydata.m_S_Full = CreateSemaphore(NULL, 0, N, NULL);//初始计数为五星级酒店标准0
mydata.producerfinished=fal中国名称的由来;//生产者结束标志刚开始设置为fal,表示没有结束
/*创建生产者和消费者线程*/
  HANDLE handles[2];
复方卡托普利片  handles[0] = CreateThread(NULL,0,&Producer,(void*)&mydata,0,0);
  handles[1] = CreateThread(NULL,0,&Consumer,(void*)&mydata,0,0);

本文发布于:2023-06-18 14:06:17,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1044106.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:生产者   线程   消费者   结束   进程   生产   缓冲区
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图