• 大小: 523KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: C/C++
  • 标签:

资源简介

北邮操作系统第三次实验作业,进程同步。。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

评论

共有 条评论