资源简介

通过3个进程,3个缓冲队列,模拟缓冲池输入、计算、输出的过程。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 

DWORD  WINAPI Thread1(LPVOID lpPara); //线程1
DWORD  WINAPI Thread2(LPVOID lpPara); //线程2
DWORD  WINAPI Thread3(LPVOID lpPara); //线程1
HANDLE MS[3];    //互斥信号 
HANDLE RS[3];  //同步信号 


struct Buffer
{
int BufNo;           //缓冲区号
int buf;             //缓冲区内容
Buffer *next;        //下一个缓冲区的指针
};
class BufferQueue        //缓冲队列类 
{
public:
BufferQueue(); 
~BufferQueue();
bool isEmpty(); 
void enqueue(int nint x=-1);    //入队 
Buffer *dequeue();               //出队   
private:
Buffer *front*rear; 
};
BufferQueue::BufferQueue()        //构造 
{
front=rear=NULL;
}
BufferQueue::~BufferQueue()       //析构 
{
Buffer *q=front*p;
while(q!=NULL)
{
p=q;
q=q->next;
delete p;
}
front=rear=NULL;
}  
bool BufferQueue::isEmpty()     //判断是否空队列 
{
return front==NULL&&rear==NULL;

void BufferQueue::enqueue(int nint x)     //入队     
{
Buffer *q=new Buffer;
if(x!=-1)   //插入非空缓冲区
q->buf=x;       
q->BufNo=n;          //缓冲区序号
if(isEmpty())            //空队列插入      
front=q; 
else
  rear->next=q;         //列尾插入
rear=q;
}
Buffer *BufferQueue::dequeue()       //出队 
{
Buffer *q=front;
front=front->next;
if(front==NULL)     //空队列时,首尾同步 
rear=NULL; 
return q;
}

BufferQueue empinqoutq;   //3个缓冲队列 

Buffer* takeBuf(int type);   //从type类型缓冲队列头取出一个缓冲区
void addBuf(int typeBuffer* buffer);  //将buffer插入type类型队列尾
Buffer* getBuf(int type);      //包含了同步和互斥控制的takeBuf操作
void putBuf(int type Buffer* buffer);  //包含了同步和互斥控制的addBuf操作

enum type{emptyinputoutput};   //类型
 
int main()
{
DWORD ThreadId1 ThreadId2ThreadId3;
for(int a=0;a<20;a++)                   //假设20个缓冲区 
emp.enqueue(a);
for(int a=0;a<3;a++)           //3个互斥信号 
MS[a]=CreateMutex(NULLFALSE“qemtx“);  
RS[0]=CreateSemaphore(NULL2020 “esp“);        //3个同步信号 
RS[1]=RS[2]=CreateSemaphore(NULL020 “iosp“);
HANDLE ithread = CreateThread(NULL0Thread1NULL0&ThreadId1);
HANDLE cthread = CreateThread(NULL0Thread2NULL0&ThreadId1);
HANDLE othread =

评论

共有 条评论