没有合适的资源?快使用搜索试试~ 我知道了~
简单的操作系统有关生产者与消费者的程序操作
资源推荐
资源详情
资源评论
#include<windows.h>
#include<stdio.h>
#include<fstream.h>
#include<io.h>
#include<conio.h>
#include<string>
#define INTE_PER_SEC 1000 //每秒时钟中断数目
#define MAX_BUFFER_NUM 10 //最大临界区数
#define MAX_THREAD_NUM 64 //生产者和消费者的最大线程数目
struct ThreadInfo
{
int serial; //线程序号
char entity; //线程类别(判断是生产者线程还是消费者线程)
double delay; //线程延迟
int thread_request [MAX_THREAD_NUM];//线程请求队列
int n_request; //消费者请求消费产品的个数
};
CRITICAL_SECTION PC_Critical[MAX_BUFFER_NUM];//临界区对象的声明,用于管理缓冲区的互斥访问
int Buffer_Critical[MAX_BUFFER_NUM]; //缓冲区声明,用于存放产品
HANDLE h_Thread[MAX_THREAD_NUM]; //用于存放每个线程句柄的数组
ThreadInfo Thread_Info[MAX_THREAD_NUM]; //线程信息数组
HANDLE empty_semaphore; //信息量
HANDLE h_mutex; //互斥量
DWORD n_Thread=0; //实际的线程数目
DWORD n_Buffer_or_Critical; //实际的缓冲区或者临界区数目
HANDLE h_Semaphore[MAX_THREAD_NUM]; //允许消费者开始消费的信号量
#include<stdio.h>
#include<fstream.h>
#include<io.h>
#include<conio.h>
#include<string>
#define INTE_PER_SEC 1000 //每秒时钟中断数目
#define MAX_BUFFER_NUM 10 //最大临界区数
#define MAX_THREAD_NUM 64 //生产者和消费者的最大线程数目
struct ThreadInfo
{
int serial; //线程序号
char entity; //线程类别(判断是生产者线程还是消费者线程)
double delay; //线程延迟
int thread_request [MAX_THREAD_NUM];//线程请求队列
int n_request; //消费者请求消费产品的个数
};
CRITICAL_SECTION PC_Critical[MAX_BUFFER_NUM];//临界区对象的声明,用于管理缓冲区的互斥访问
int Buffer_Critical[MAX_BUFFER_NUM]; //缓冲区声明,用于存放产品
HANDLE h_Thread[MAX_THREAD_NUM]; //用于存放每个线程句柄的数组
ThreadInfo Thread_Info[MAX_THREAD_NUM]; //线程信息数组
HANDLE empty_semaphore; //信息量
HANDLE h_mutex; //互斥量
DWORD n_Thread=0; //实际的线程数目
DWORD n_Buffer_or_Critical; //实际的缓冲区或者临界区数目
HANDLE h_Semaphore[MAX_THREAD_NUM]; //允许消费者开始消费的信号量
/************************************************************************/
//生产者消费者及辅助函数的定义
//确认是否还有对同一产品的消费请求未执行
bool IfInOtherRequest(int req)
{
for(int i=0;i<n_Thread;i++)
for(int j=0;j<Thread_Info[i].n_request;j++)
if(Thread_Info[i].thread_request[j]==req)
return TRUE;
return FALSE;
}
//找出当前可以进行产品生产的空缓冲区位置
int FindProducePosition()
{
int EmptyPosition;
for(int i=0;i<n_Buffer_or_Critical;i++)
if(Buffer_Critical[i]==-1)
{
EmptyPosition=i;
//用下面这个特殊值表示本缓冲区正处于消费状态
Buffer_Critical[i]=-2;
break;
}
return EmptyPosition;
}
//找出当前所需生产者生产的产品的位置
int FindBufferPosition(int ProPos)
{
//生产者消费者及辅助函数的定义
//确认是否还有对同一产品的消费请求未执行
bool IfInOtherRequest(int req)
{
for(int i=0;i<n_Thread;i++)
for(int j=0;j<Thread_Info[i].n_request;j++)
if(Thread_Info[i].thread_request[j]==req)
return TRUE;
return FALSE;
}
//找出当前可以进行产品生产的空缓冲区位置
int FindProducePosition()
{
int EmptyPosition;
for(int i=0;i<n_Buffer_or_Critical;i++)
if(Buffer_Critical[i]==-1)
{
EmptyPosition=i;
//用下面这个特殊值表示本缓冲区正处于消费状态
Buffer_Critical[i]=-2;
break;
}
return EmptyPosition;
}
//找出当前所需生产者生产的产品的位置
int FindBufferPosition(int ProPos)
{
剩余8页未读,继续阅读
资源评论
jpeghld3
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功