16,465
社区成员
发帖
与我相关
我的任务
分享
#include<deque>
using std::deque;
#include<iostream>
using std::cout;
using std::endl;
int const BUFFER_MAX_SIZE =10;
deque<int>dq(BUFFER_MAX_SIZE); //BUFFER_MAX_SIZE个大小的缓冲区
class CritHelper
{
临界区帮助类 raii
};
class CritHelpIO //std::cout,std::endl; 防止 生产者,消费者以外的线程使用
{
raii;
};
//初始化数据,子线程以外先调用
void InitData()
{
deque<int>::iter =dq.begin();
for(int i=1;(i<=BUFFER_MAX_SIZE )&& (iter!= dq.end()); i++)
{
*iter=0;
}
}
//队列中添加数据
void put(int n)
{
CritHelper ch;
if(dq.size()==BUFFER_MAX_SIZE) //满了
{
while(1){}; //等到有空位
{
CritHelpIO chi;
cout<<"进入的数据位:"<<n<<endl;
}
dq.push_back(n);
}
}
//获取数据
int get()
{
CritHelper ch;
if(dq.empty()) //空
{
while(1){}; //等到有数据
{
CritHelpIO chi;
cout<<"取出的数据位:"<<dq.front()<<endl;
}
dq.pop_front();
}
}
void Produce(int n)
{
for( int i=0 ;i<n ; i++)
{
put(i);
}
}
void Consumer(int n)
{
for( int i=0 ;i<n ; i++)
{
get();
}
}
deque<int>::iterator iter =dq.begin();
for(; iter!= dq.end(); iter++) //这样就可以了,不要搞太复杂
{
*iter=0;
}
#include "stdafx.h"
#include <process.h>
#include <windows.h>
#include<deque>
using std::deque;
#include<iostream>
using std::cout;
using std::endl;
int const BUFFER_MAX_SIZE =10; //BUFFER_MAX_SIZE个大小的缓冲区
deque<int>dq;
class CritHelper
{
//临界区帮助类 raii
CRITICAL_SECTION cs;
public:
CritHelper()
{
::InitializeCriticalSection(&cs);
::EnterCriticalSection(&cs);
}
~CritHelper()
{
::LeaveCriticalSection(&cs);
::DeleteCriticalSection(&cs);
}
};
class CritHelpIO
{
//临界区帮助类 raii
CRITICAL_SECTION cs;
public:
CritHelpIO()
{
::InitializeCriticalSection(&cs);
::EnterCriticalSection(&cs);
}
~CritHelpIO()
{
::LeaveCriticalSection(&cs);
::DeleteCriticalSection(&cs);
}
};
//初始化数据,子线程以外先调用
void InitData()
{
deque<int>::iterator iter =dq.begin();
for(int i=1;(i<=BUFFER_MAX_SIZE )&& (iter!= dq.end()); i++)
{
*iter=0;
}
}
//队列中添加数据
void put(int n)
{
CritHelper ch;
if(dq.size()==BUFFER_MAX_SIZE) //满了
{
while(1){}; //等到有空位
}
{
CritHelpIO chi;
cout<<"进入的数据位:"<<n<<endl;
}
dq.push_back(n);
}
//获取数据
void get()
{
int val;
CritHelper ch;
if(dq.empty()) //空
{
while(1){}; //等到有数据
}
val=dq.front();
{
CritHelpIO chi;
cout<<"取出的数据位:"<<val<<endl;
}
dq.pop_front();
}
unsigned int _stdcall Produce(VOID* n)
{
int*p =(int*)n;
for( int i=0 ;i<*p ; i++)
{
put(i);
}
return 0;
}
unsigned int _stdcall Consumer(VOID* n)
{
int *p=(int*)n;
for( int i=0 ;i<*p ; i++)
{
get();
}
return 0;
}
int main()
{
int val=10;
HANDLE hWnd1=(HANDLE)_beginthreadex(NULL,0,Produce,&val,0,NULL);
HANDLE hWnd2=(HANDLE)_beginthreadex(NULL,0,Produce,&val,0,NULL);
int val2=20;
HANDLE hWnd3=(HANDLE)_beginthreadex(NULL,0,Consumer,&val2,0,NULL);
Sleep(50000);
return 0;
}