1 / 8
文档名称:

生产者与消费者算法(doc8页)优质版.docx

格式:docx   大小:18KB   页数:8页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

生产者与消费者算法(doc8页)优质版.docx

上传人:cjc201601 2021/7/29 文件大小:18 KB

下载得到文件列表

生产者与消费者算法(doc8页)优质版.docx

文档介绍

文档介绍:#include<>
#include<>
#include<>
#include<string> #include<> //定义一些常量; 〃本程序允许的最大临界区数; #define MAX_BUFFER_NUM 10 〃秒到微秒的乘法因子; #define INTE_PER_SEC 1000 //本程序允许的生产和消费线程的总数; #define MAX_THREAD_NUM 64 //定义一个结构,记录在测试文件中指定的每一个线程的参数 struct Threadinfo
{
int serial; //线程序列号
char entity; 〃是 P 还是 C
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]; 〃生产者允许消费者开始消费的信号量;
//生产消费及辅助函数的声明
void Produce(void *p);
void Consume(void *p);
bool IflnOtherRequest(int);
int FindProducePositon();
int FindBufferPosition(int);
int main(void) {
//声明所需变量;
DWORD wait_for_all; ifstream inFile;
//初始化缓冲区;
for(int i=0;i< MAX_BUFFER_NUM;i++) Buffer_Critical[i] = -1;
//初始化每个线程的请求队列;
for(int j=0;j<MAX_THREAD_NUM;j++){
for(int k=0;k<MAX_THREAD_NUM;k++) Thread_Info[j].thread_request[k] = -1;
Thread_Info[j].n_request = 0;
}
//初始化临界区;
for(i =0;i< MAX_BUFFER_NUM;i++) InitializeCriticalSection(&PC_Critical[i]);
〃打