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