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

📄 a.cpp

📁 该程序创建了两个进程
💻 CPP
字号:
#include <iostream.h>
#include <windows.h>
#include <stdio.h>

int Buffer[9];
int ProID=0,ConID=0,In=0,Out=0;

DWORD WINAPI Pro(LPVOID);
DWORD WINAPI Con(LPVOID);

HANDLE Mutex,Full,Empty,ProT,ConT;

DWORD ProTFlag;
DWORD ConTFlag;

int main ()
{
	cout<<"单一生产消费模拟程式 Copyright 2008 By 北极熊"<<endl<<"*-*-*-*-*-*-*-*-*-*-*-*-*"<<endl;
	cout<<"2秒后生产消费装置启动"<<endl;
	Sleep(2000);
	cout<<"生产消费装置已经启动"<<endl;
	Sleep(1000);
	Mutex=CreateMutex(NULL,FALSE,NULL);
	Full=CreateSemaphore(NULL,0,8,NULL);
	Empty=CreateSemaphore(NULL,8,8,NULL);
	while (1)
	{ 
		
	ProT=CreateThread(NULL,0,Pro,NULL,0,&ProTFlag);
	Sleep(2000);
	ConT=CreateThread(NULL,0,Con,NULL,0,&ConTFlag);
	Sleep(1000);
	if (getchar())
		break;
	}
	return (0);
}

DWORD WINAPI Pro(LPVOID)
{
	WaitForSingleObject(Empty,INFINITE);
	WaitForSingleObject(Mutex,INFINITE);
	ProID++;
	cout<<"生产产品中....请稍后"<<endl;
	Sleep(1000);
	cout<<"新产品编号是"<<ProID<<endl;
	Buffer[In]=ProID;
	In=(In+1)%9;
	cout<<"生产成功,产品已放入缓冲区"<<endl<<"正在输出缓冲区状态"<<endl;
	for (int p=0;p<9;p++)
	{
		cout<<"缓冲区第"<<p<<"段产品ID为"<<Buffer[In];
		if (In==p)
			cout<<"*********正在生产的产品....";
		if (Out==p)
			cout<<"*********正在消费的产品....";
		cout<<endl<<endl;
	}
	ReleaseMutex(Mutex);
	ReleaseSemaphore(Full,1,NULL);
	return (0);
}

DWORD WINAPI Con(LPVOID)
{
	WaitForSingleObject(Full,INFINITE);
	WaitForSingleObject(Mutex,INFINITE);
	ConID++;
	cout<<"消费产品中....请稍后"<<endl;
	Sleep(1000);
	cout<<"消费的产品编号是"<<ProID<<endl;
	ConID=Buffer[Out];
	Out=(Out+1)%9;
	cout<<"消费成功,产品已取出缓冲区"<<endl<<"正在输出缓冲区状态"<<endl;
	for (int c=0;c<9;c++)
	{
		cout<<"缓冲区第"<<c<<"段产品ID为"<<Buffer[In];
		if (In==c)
			cout<<"*********正在生产的产品....";
		if (Out==c)
			cout<<"*********正在消费的产品....";
		cout<<endl<<endl;
	}
	ReleaseMutex(Mutex);
	ReleaseSemaphore(Empty,1,NULL);
	return (0);
}

⌨️ 快捷键说明

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