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

📄 procon.cpp

📁 单色仪和狭缝——同步加速地区性脍炙人口 肝硬化
💻 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 + -