⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qwe.cpp

📁 生产者与消费者问题的实现
💻 CPP
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -