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

📄 buffer_pool.cpp

📁 生产者消费者Buffer_pool.rar
💻 CPP
字号:
#include <windows.h>
#include <iostream.h>

#define BUFSIZE 9

int in=0,out=0,n,buffer[BUFSIZE];
DWORD pMaxTime=1000,cMaxTime=1000;
HANDLE hBufferMutex,EmptyHandle,FullHandle,Produce,Consume;
LONG cMax=BUFSIZE;

void wrong(char infor[30])
{
	cout<<infor<<endl;
	exit(0);
}

DWORD WINAPI producer(LPVOID empty)
{	
	for(;;)
	{
		WaitForSingleObject(EmptyHandle,pMaxTime);
		WaitForSingleObject(hBufferMutex,pMaxTime);
		Sleep(100);
		buffer[in]=in;
		cout<<"Producer:the information "<<buffer[in]<<" is produced."<<endl<<endl;
		in=(in+1)%30;	
		if(!ReleaseSemaphore(FullHandle,1,NULL))
		wrong("Can't release fullhandle!");
		if(!ReleaseMutex(hBufferMutex))
			wrong("Can't release mutex in producer!");
	}
	return 0;
}

DWORD WINAPI Consumer(LPVOID empty)
{	
	for(;;)
	{
		WaitForSingleObject(FullHandle,cMaxTime);
		WaitForSingleObject(hBufferMutex,cMaxTime);		
		Sleep(100);
		cout<<"\t\tConsumer:the information "<<buffer[out]<<" is consumpted."<<endl<<endl;
		out=(out+1)%30;
		if(!ReleaseSemaphore(EmptyHandle,1,NULL))
			wrong("Can't release Emptyhandle!");
		if(!ReleaseMutex(hBufferMutex))
			wrong("Can't release mutex in consumer!");
	}
	return 0;
}

void main(void)
{
	
	DWORD id;
	char over;
	BOOL fControl=1;
	hBufferMutex=CreateMutex(NULL,false,NULL);
	EmptyHandle=CreateSemaphore(NULL,cMax,cMax,NULL);
	FullHandle=CreateSemaphore(NULL,0,cMax,NULL);	
	Produce=CreateThread(NULL,0,producer,NULL,0,&id);
	Consume=CreateThread(NULL,0,Consumer,NULL,0,&id);
	if(hBufferMutex==NULL)
		wrong("Create mutex to buffer fail!");	
	if(EmptyHandle==NULL)
		wrong("Create buffer empty semaphore faiL!");
	if(Produce==NULL)
		wrong("Create producer thread fail!");
	if(Consume==NULL)
		wrong("Create Consumer thread fail!");
	while(1)
	{	
		cin>>over;
		if(over=='e')
		{
			cout<<endl;
			cout<<"the program is over!"<<endl;
			exit(0);
		}
	}

}

	



⌨️ 快捷键说明

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