📄 procon.cpp
字号:
#include<stdio.h>
#include< iostream.h>
#include< windows.h>
#define BufferSize 15
int Buffer[BufferSize];
int head,tail=0;//Buffer数组下标
int count;//被使用的缓冲区数量
HANDLE hMutex;
HANDLE hNotFullEvent, hNotEmptyEvent;//用来同步生产者和消费者线程
////////缓冲区存储情况
display(int a[15])
{
int i;
cout<<"缓冲区存储情况为:"<<endl;
for (i=14;i>=0;i--)
{
cout<<"\t|----"<<a[i]<<"----|"<<endl;
}
}
//p1
void p1_Producer()
{
int i;
char ch;
char p1[]={'a','A','b','B','c','C','D','d','E','e'};
while(1)
{
if(count==BufferSize)
{ //缓冲区满
//等待直到缓冲区非满
WaitForSingleObject(hNotFullEvent,INFINITE);
continue;
}
//得到互斥锁且缓冲区非满,开始产生新数据
WaitForSingleObject(hMutex,INFINITE);
cout<<"Producer p1:\t"<<endl;
Buffer[tail]=1;
//tail=(tail+1)%BufferSize;///存放于缓冲区的位置
display(Buffer);
//tail++;
tail=(tail+1)%BufferSize;///存放于缓冲区的位置
count++;
cout<<"按ENTER继续...."<<endl;
ch=getchar();
ReleaseMutex(hMutex); //结束临界区
PulseEvent(hNotEmptyEvent); //唤醒消费者线程
}
}
void c1_Consumer()
{
int i,j,k;
char result,ch;
while(1)
{
if(count==0)
{
WaitForSingleObject(hNotEmptyEvent,INFINITE);
continue;
}
//得到互斥锁且缓冲区非满,开始产生新数据
WaitForSingleObject(hMutex,INFINITE);
cout<<"Consumer c1:\t"<<endl;
Buffer[head]=0;
//tail=(tail+1)%BufferSize;///存放于缓冲区的位置
cout<<"0表示数据已被消费"<<endl;
display(Buffer);
//tail++;
head=(head+1)%BufferSize;
count--;
cout<<"按ENTER继续...."<<endl;
ch=getchar();
ReleaseMutex(hMutex); // 结束临界区
PulseEvent(hNotFullEvent); // 唤醒生产者线程
}
}
//////////////////////////////////////////////////////////////////
//主函数
void main()
{
HANDLE hThreadVector[6];
DWORD ThreadID;
count = 0;
head = 0;
tail = 0;
hMutex=CreateMutex(NULL,FALSE,NULL);
hNotFullEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
hNotEmptyEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
hThreadVector[0]=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) p1_Producer,NULL, 0, (LPDWORD)&ThreadID);
hThreadVector[1]=CreateThread (NULL, 0,(LPTHREAD_START_ROUTINE) c1_Consumer,NULL, 0, (LPDWORD)&ThreadID);
WaitForMultipleObjects(1,hThreadVector,TRUE,INFINITE);
//cout<<"**********************Finish*************************"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -