qwe.cpp

来自「生产者与消费者问题的实现」· C++ 代码 · 共 93 行

CPP
93
字号
#include<windows.h>
#include<iostream.h>
/*******************************栈的相关操作************************************/
typedef  struct M
{
	int data;
	M *next;

}N;
N *top;
HANDLE empty,full;
CRITICAL_SECTION in,out;
const MAX=5;
//---------------入栈-----------------
void push(int v)
{
	M *t;
	EnterCriticalSection(&in);
	t= new M;
	t->data=v;
	t->next=top;
	top=t;
	LeaveCriticalSection(&in);
}
//----------------出栈-----------------
int pop()
{
	M *t;
	int v;
   EnterCriticalSection(&in);
   if(top==0)
   {
	   LeaveCriticalSection(&in);
       return 0;
   }
   t=top;
   v=top->data;
   top=top->next;
   delete t;
   LeaveCriticalSection(&in);
       return v;
}
/*---------------消费者------------------------*/
VOID consumer(VOID)
{
	int x,p;
	LONG c;
	for(x=0;x<10;x++)
	{
		WaitForSingleObject(full,INFINITE);
		Sleep(100);
		p=pop();
		ReleaseSemaphore(empty,1,&c);
        EnterCriticalSection(&out);
		cout<<"取走第"<<x+1<<"消息"<<"值为:"<<p<<"空余:"<<c<<endl;
        LeaveCriticalSection(&out);
		Sleep(200);
	}
}
/*---------------消费者-------------------------*/
VOID producer (VOID)
{int x;
	LONG c;

	for(x=0;x<10;x++)
	{
		WaitForSingleObject(empty,INFINITE);
		push(x);
		ReleaseSemaphore(full,1,&c);
        EnterCriticalSection(&out);
		cout<<"产生第"<<x+1<<"消息"<<"值为:"<<x<<"信息量:"<<c+1<<endl;
        LeaveCriticalSection(&out);
		Sleep(100);
	}

}
/**********************主函数**********************************/
const INT A=2;
void main(void)
{
HANDLE  h[A];
DWORD ThreadID;
InitializeCriticalSection(&in);
InitializeCriticalSection(&out);
full=CreateSemaphore(0,0,MAX,0);
empty=CreateSemaphore(0,MAX,MAX,0);
h[0]=CreateThread(0,0,(LPTHREAD_START_ROUTINE)consumer,0,0,&ThreadID);
h[1]=CreateThread(0,0,(LPTHREAD_START_ROUTINE)producer,0,0,&ThreadID);
WaitForMultipleObjects(A,h,TRUE,INFINITE);
CloseHandle(empty);
CloseHandle(full);

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?