首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

早下好,小弟我问个 不用信号量 实现 生产者-消费者模型的有关问题

2012-10-16 
早上好,我问个 不用信号量 实现 生产者---消费者模型的问题C/C++ code#include stdafx.h#include proce

早上好,我问个 不用信号量 实现 生产者---消费者模型的问题

C/C++ code
#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 put(int n){    CritHelper ch;    if(dq.size()==BUFFER_MAX_SIZE) //满了    {     //   while(1){};        //等到有空位::Sleep(2);    }    {        CritHelpIO chi;        cout<<"进入的数据位:"<<n<<endl;    }    dq.push_back(n);}//获取数据void get(){    int val;    CritHelper ch;    if(dq.empty()) //空    {     //   while(1){};        //等到有数据::Sleep(2);    }    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;}



2个生产者,1个消费者,

这是我写的

有什么问题吗





[解决办法]
你自己遇到什么问题了嘛??
[解决办法]
你这里对于队列的操作起不到同步的作用

热点排行