早上好,我问个 不用信号量 实现 生产者---消费者模型的问题
- 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个消费者,
这是我写的
有什么问题吗
[解决办法]
你自己遇到什么问题了嘛??
[解决办法]
你这里对于队列的操作起不到同步的作用