📄 qwe.cpp
字号:
#include<windows.h>
#include<iostream.h>
/*******************************栈的相关操作************************************/
typedef struct M
{
int data;
M *next;
}N;
N *top;
HANDLE empty,full;
CRITICAL_SECTION in,out;
const MAX=5;
//---------------入栈-----------------
void push(int v)
{
M *t;
EnterCriticalSection(&in);
t= new M;
t->data=v;
t->next=top;
top=t;
LeaveCriticalSection(&in);
}
//----------------出栈-----------------
int pop()
{
M *t;
int v;
EnterCriticalSection(&in);
if(top==0)
{
LeaveCriticalSection(&in);
return 0;
}
t=top;
v=top->data;
top=top->next;
delete t;
LeaveCriticalSection(&in);
return v;
}
/*---------------消费者------------------------*/
VOID consumer(VOID)
{
int x,p;
LONG c;
for(x=0;x<10;x++)
{
WaitForSingleObject(full,INFINITE);
Sleep(100);
p=pop();
ReleaseSemaphore(empty,1,&c);
EnterCriticalSection(&out);
cout<<"取走第"<<x+1<<"消息"<<"值为:"<<p<<"空余:"<<c<<endl;
LeaveCriticalSection(&out);
Sleep(200);
}
}
/*---------------消费者-------------------------*/
VOID producer (VOID)
{int x;
LONG c;
for(x=0;x<10;x++)
{
WaitForSingleObject(empty,INFINITE);
push(x);
ReleaseSemaphore(full,1,&c);
EnterCriticalSection(&out);
cout<<"产生第"<<x+1<<"消息"<<"值为:"<<x<<"信息量:"<<c+1<<endl;
LeaveCriticalSection(&out);
Sleep(100);
}
}
/**********************主函数**********************************/
const INT A=2;
void main(void)
{
HANDLE h[A];
DWORD ThreadID;
InitializeCriticalSection(&in);
InitializeCriticalSection(&out);
full=CreateSemaphore(0,0,MAX,0);
empty=CreateSemaphore(0,MAX,MAX,0);
h[0]=CreateThread(0,0,(LPTHREAD_START_ROUTINE)consumer,0,0,&ThreadID);
h[1]=CreateThread(0,0,(LPTHREAD_START_ROUTINE)producer,0,0,&ThreadID);
WaitForMultipleObjects(A,h,TRUE,INFINITE);
CloseHandle(empty);
CloseHandle(full);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -