早上好,我问个 不用信号量 实现 生产者---消费者模型的问题
#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个消费者,
这是我写的
有什么问题吗
...全文
相关推荐
使用信号量实现有限缓冲区的生产者和消费者问题
总结来说,使用信号量实现有限缓冲区的生产者和消费者问题以及读进程具有优先权的读者和写者问题,关键在于正确地设计和操作信号量,确保并发进程的正确同步和互斥。
以记录型信号量实现生产者-消费者问题
本程序利用Windows API实现了生产者-消费者问题的多线程模拟,通过信号量控制对共享资源的访问。用户可自定义生产者和消费者数量及缓冲区大小,并启动相关线程进行操作。
LinuxC语言实现生产者和消费者模型
本文详细介绍了如何使用共享内存和信号量实现生产者-消费者模型。通过创建共享内存段和信号量集,生产者和消费者进程能够同步和互斥地进行商品信息的生产和消费。代码中涉及了多个系统调用,如semget、sem
生产者消费者的c++代码实现
线程同步:通过使用信号量机制来实现生产者消费者问题的同步,使得线程之间的访问顺序变得有序。本代码实现了生产者消费者问题的同步,使用信号量机制来控制线程之间的访问顺序,防止多个线程同时访问共享资源。
C语言实现生产者消费者问题
C语言实现生产者消费者问题,分配具有n个缓冲区的缓冲池,作为共享资源。定义两个资源型信号量empty 和full,empty信号量表示当前空的缓冲区数量,full表示当前满的缓冲区数量。定义互斥信号量


