您的位置:首页 > 其它

vc实现的 生成者,消费者问题

2011-06-17 16:26 369 查看
vc实现的 生成者,消费者问题

// Demo_MultiThread.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include<stdio.h>
#include<iostream>
#include<windows.h>
#include<process.h>
#include<stdlib.h>
#include<Winbase.h>
using namespace std;
unsigned _stdcall ThreadProducer(void *pArgement);
unsigned _stdcall ThreadProducer2(void *pArgement);
unsigned _stdcall ThreadConsumer(void *pArgement);

CRITICAL_SECTION cs;
int iArriay[5];
static int bJudge=1;

int main()
{
unsigned long hThreadProducer,hThreadProducer2,hThreadConsumer;

InitializeCriticalSection(&cs);
hThreadProducer=_beginthreadex(NULL,0,&ThreadProducer,NULL,0,NULL);
hThreadProducer2=_beginthreadex(NULL,0,&ThreadProducer2,NULL,0,NULL);
hThreadConsumer=_beginthreadex(NULL,0,&ThreadConsumer,NULL,0,NULL);

WaitForSingleObject((void *)hThreadProducer,INFINITE);
WaitForSingleObject((void *)hThreadConsumer,INFINITE);
WaitForSingleObject((void *)hThreadProducer2,INFINITE);
DeleteCriticalSection(&cs);
return 0;
}

unsigned _stdcall ThreadProducer(void *pArgement)
{
while(1)
{

EnterCriticalSection(&cs);
bJudge ++;
cout<<"生成者1====" << bJudge<< endl;
LeaveCriticalSection(&cs);
Sleep(500);
}
return 0;
}

unsigned _stdcall ThreadConsumer(void *pArgement)
{
FILE *fFile;
while(1)
{
EnterCriticalSection(&cs);
std::string  info = "消费者===";
if(bJudge <=0)
{
cout << "消费者不消费了=========="<< bJudge<<endl;
LeaveCriticalSection(&cs);
}
else
{
bJudge--;

char buf[10];
itoa(bJudge,buf,10);
info += buf;
fopen_s(&fFile,"f://1.txt","at+");
fprintf(fFile,"%s/r/n",info.c_str());
fclose(fFile);
cout << "消费者========="<< bJudge<< endl;
Sleep(20);

}
LeaveCriticalSection(&cs);
Sleep(100);

}

}

unsigned _stdcall ThreadProducer2(void *pArgement)
{
while(1)
{

EnterCriticalSection(&cs);
bJudge ++;
cout<<"生成者2====" << bJudge<< endl;

LeaveCriticalSection(&cs);
Sleep(500);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: