资源简介
北邮操作系统第三次实验作业,进程同步。。C语言编写。。。windows环境下运行。。欢迎大家下载。。。↖(^ω^)↗。。附带实验报告哦。。亲
代码片段和文件信息
#include
#include
#include
#include
using namespace std;
typedef HANDLE Semaphore; //信号量的定义
typedef int size; //数据大小定义
typedef int Boundary; //缓冲区边界定义
typedef int Buffer_Kind; //定义缓冲区数据类型
typedef int kind_of_request; //请求类型
typedef int Time; //定义时间类型
typedef int Process_Kind;
typedef int Sequence_number;
/*最大缓冲区*/
const size MAX_BUFFER = 256;
const size MAX_REQUEST=20;
typedef struct node
{
Process_Kind con_or_prod; //请求者的类型
Time consume_time; //占用时间
}Pro;
/*缓冲区的边界设置 实现一个循环队列*/
Boundary on; //上边界
Boundary off; //下边界
/*定义缓冲区数组(队列)*/
Buffer_Kind buffer[MAX_BUFFER] ;
/*定义请求队列(包含请求的进程类型,进程所占用的时间)*/
Pro request[MAX_REQUEST];
/*定义三个信号量
mutex(对仓库访问的控制)empty(消费者消费的控制量)full(生产者生产的控制量)
*/
Semaphore mutex ;
Semaphore full ;
Semaphore empty;
HANDLE total_thread[MAX_REQUEST]; //总线程
/*定义生产者和消费者的队列*/
DWORD product_id[MAX_REQUEST] ; //生产者队列
DWORD consume_id[MAX_REQUEST]; //消费者队列
Sequence_number product_number; //生产者的标号
Process_Kind PRODUCT ; //生产者
Process_Kind CONSUME; //消费者
/*用户输入*/
size BUFFER_SIZE; //仓库大小
size REQUEST_NUM;//请求的个数
/*主控制程序*/
int Process_Control();
void Initialization();
/*系统调用的接口(生产者的系统调用)*/
DWORD WINAPI producer(LPVOID lpPara);
/*系统调用的接口(消费者的系统调用)*/
DWORD WINAPI consumer(LPVOID lpPara);
void Initialization()
{
product_number=1;
on=off=0;
memset(buffer 0 sizeof(buffer)) ;
cout<<“ \t \t 这是一个简单的进程(线程模拟实验) \t\t“< cout<<“请输入仓库的大小: “< cin>>BUFFER_SIZE;
cout<<“请输入总的线程数:“< cin>>REQUEST_NUM;
char ch;
Time temptime;//临时的一个保存时间的变量
for(int i=0; i {
cout<<“请输入第“< cin>>ch>>temptime;
request[i].consume_time=temptime;
request[i].con_or_prod=ch;
}
}
DWORD WINAPI producer(LPVOID lpPara)
{
WaitForSingleobject(full INFINITE); //等待空位
WaitForSingleobject(mutex INFINITE); //对仓库的操作权
/*跳过生产过程
pa pa pa pa
*/
cout<<“生产者“<<(int)lpPara<<“正在生产产品放在“< buffer[on]=++product_number;
on=(on+1)%BUFFER_SIZE;
Sleep(5);
cout<<“生产者“<<(int)lpPara<<“生产成功!!“<
ReleaseMutex(mutex); //释放仓库操作权
ReleaseSemaphore(empty 1 NULL); //非空位加一
return 0;
}
DWORD WINAPI consumer(LPVOID lpPara)
{
WaitForSingleobject(empty INFINITE);//等待非空位
WaitForSingleobject(mutex INFINITE); //对仓库的操作权
//开始从仓库取出产品
cout<<“消费者“<<(int)lpPara<<“正在进行消费第“<
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2012-11-16 00:05 06-龙佳-10211295\
文件 33792 2012-11-16 00:04 06-龙佳-10211295\实验2 进程管理.doc
文件 852 2012-11-16 00:01 06-龙佳-10211295\程序1.cpp
文件 1029 2012-11-16 00:02 06-龙佳-10211295\程序2.cpp
文件 1086 2012-11-16 00:03 06-龙佳-10211295\程序3.cpp
文件 1367 2012-11-16 00:03 06-龙佳-10211295\程序4.cpp
文件 1031 2012-11-16 00:04 06-龙佳-10211295\程序5.cpp
文件 230120 2012-11-25 21:04 实验三-进程同步.docx
文件 5335 2012-11-25 19:30 生产者消费者问题.cpp
文件 1297539 2012-11-25 21:01 生产者消费者问题.exe
- 上一篇:背包问题之贪婪算法求解C语言源代码).
- 下一篇:模拟洗牌与发牌程序用C++写的
评论
共有 条评论