📄 线程写.txt
字号:
#include "windows.h"
#include <conio.h>
#include <stdlib.h>
#include <fstream.h>
#include <io.h>
#include <string.h>
#include <stdio.h>
#define PRODUCER 'P' //生产者
#define CONSUMER 'C' //消费者
#define INTE_PER_SEC 1000 //每秒时钟中断的数目
#define MAX_THREAD_NUM 64 //最大线程数
#define MAX_FILE_NUM 32 //最大文件数目数
#define MAX_STR_LEN 32 //字符串的长度
DWORD mutex;
HANDLE h_Mutex;
struct ThreadInfo
{
int serial; //线程序号
char entity; //线程类别(判断是生产者还是消费者线程)
double delay; //线程延迟时间
double persist; //线程读写操作时间
};
///////////////////////////////////////////////////////////////////////////
//P:生产者线程信息
void ProducerThread(void *p)
{
//互斥变量
h_Mutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex");
DWORD m_delay; //延迟时间
DWORD m_persist; //读文件持续时间
int m_serial; //线程序号
// 从参数中获得信息
m_serial=((ThreadInfo*)(p))->serial ;
m_delay=(DWORD)(((ThreadInfo*)(p))->delay *INTE_PER_SEC);
m_persist=(DWORD)(((ThreadInfo*)(p))->persist *INTE_PER_SEC);
Sleep(m_delay); //延迟等待
printf("生产者进程 %d 发出请求\n",m_serial);
//等待互斥信号,保证访问,修改互斥
mutex=WaitForSingleObject(h_Mutex,-1);
printf("生产者线程 %d 开始往缓冲池放产品\n",m_serial,-1);
Sleep(m_persist);
printf("生产者 %d 成功放入产品!\n",m_serial);
ReleaseMutex(h_Mutex); //释放互斥信号
}
/////////////////////////////////////////////////////////////
//P:消费者线程信息
void ConsumerThread(void *p)
{
//互斥变量
h_Mutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex");
DWORD m_delay; //延迟时间
DWORD m_persist; //读文件持续时间
int m_serial; //线程序号
// 从参数中获得信息
m_serial=((ThreadInfo*)(p))->serial ;
m_delay=(DWORD)(((ThreadInfo*)(p))->delay *INTE_PER_SEC);
m_persist=(DWORD)(((ThreadInfo*)(p))->persist *INTE_PER_SEC);
Sleep(m_delay); //延迟等待
printf("消费者 %d 发出请求\n",m_serial);
//等待互斥信号,保证访问,修改互斥
mutex=WaitForSingleObject(h_Mutex,-1);
printf("消费者线程 %d 开始从缓冲池取产品\n",m_serial,-1);
Sleep(m_persist);
printf("消费者线程 %d 成功取走产品!\n",m_serial);
ReleaseMutex(h_Mutex); //释放互斥信号
}
问题补充://////////////////////////////////////////////////////////////
//file:文件名
void ProducerandConsumer(char *file)
{
DWORD n_thread=0; //线程数目
DWORD thread_ID; //线程ID
DWORD wait_for_all; //等待所有线程结束
//互斥对象
HANDLE h_Mutex;
h_Mutex=CreateMutex(NULL,FALSE,"mutex");
//线程对象的数组
HANDLE h_Thread[MAX_THREAD_NUM];
ThreadInfo thread_info[MAX_THREAD_NUM];
ifstream inFile;
inFile.open (file);
printf("生产者消费者问题:\n\n");
while(inFile)
{
//读入信息
inFile>>thread_info[n_thread].serial;
inFile>>thread_info[n_thread].entity;
inFile>>thread_info[n_thread].delay;
inFile>>thread_info[n_thread++].persist;
inFile.get();
}
for(int i=0;i<(int)(n_thread);i++)
{
if(thread_info[i].entity=='p')
{
//创建生产线程
h_Thread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(ProducerThread),&thread_info[i],0,&thread_ID);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -