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

早上好,我问个 不用信号量 实现 生产者---消费者模型的问题
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个消费者,

这是我写的

有什么问题吗





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