📄 buffer_pool.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 + -