请问c++,生产者与消费者的有关问题
请教c++,生产者与消费者的问题
#include <iostream>
#include <stdlib.h>
#include <STDIO.H>
#include <windows.h>
using namespace std;
typedef int semaphore; /* 信号量是一种特殊的整型变量 */
const int SIZE_OF_BUFFER = 5 ; //缓冲区长度
const unsigned short PRODUCERS_COUNT = 2; //生产者的个数
const unsigned short CONSUMERS_COUNT = 3; //消费者的个数
DWORD producers[PRODUCERS_COUNT] ; //生产者线程的标识符
DWORD consumers[CONSUMERS_COUNT] ;//消费者线程的标识符
const unsigned short THREADS_COUNT = PRODUCERS_COUNT+CONSUMERS_COUNT; //总的线程数
/**
*定义信号量
*/
HANDLE mutex ; //互斥信号量
HANDLE full ; //表示放有产品的缓冲区数,其初值为0
HANDLE empty ; //表示可供使用的缓冲区数,其初值为N
/**
*定义共享缓冲区
*/
semaphore buffer[SIZE_OF_BUFFER];
/**
*定义生产者和消费者使用的指针
*/
int in = 0 ;
int out = 0 ;
int productNum = 0 ;
DWORD WINAPI Producer(LPVOID) ;
DWORD WINAPI Consumer(LPVOID) ;
int main(int argc, char *argv[])
{
//创建Mutex和Semaphore
mutex = CreateMutex(NULL,FALSE,NULL);
full = CreateSemaphore(NULL,0,SIZE_OF_BUFFER,NULL);
empty = CreateSemaphore(NULL,SIZE_OF_BUFFER,SIZE_OF_BUFFER,NULL);
HANDLE PVThreads[THREADS_COUNT]; //各线程的handle
//创建生产者线程
for (int i=0;i<PRODUCERS_COUNT;i++){
PVThreads[i] = CreateThread(NULL,0,Producer,NULL,0,&producers[i]);
if (PVThreads[i] == NULL) break;
}
//创建消费者线程
for (int i=0;i<CONSUMERS_COUNT;i++){
PVThreads[PRODUCERS_COUNT+i]
=CreateThread(NULL,0,Consumer,NULL,0,&consumers[i]);
if (PVThreads[i]==NULL) break;
}
bool isContinue = true ;
while(isContinue)
{
if(getchar()){ //按回车后终止程序运行
isContinue = false;
}
}
system("PAUSE");
return 0;
}
void enBuffer(int pos)
{
cout<<"正在生产产品..."<<endl ;
Sleep(2000) ;
buffer[pos] = -1 ;
productNum++ ;
cout<<"生产完成! 已生产"<<productNum<<"个产品,并将新产品放在了缓冲区位置:"<<pos<<endl ;
}
void deBuffer(int pos)
{
cout<<"正在消费产品..."<<endl ;
Sleep(1000) ;
buffer[pos] = -2 ;
productNum-- ;
cout<<"已消费在缓冲区位置:"<<pos<<"的产品,缓冲区剩余空间:"<<SIZE_OF_BUFFER-productNum<<endl ;
cout<<endl ;
}
#include <iostream>
#include <stdlib.h>
#include <STDIO.H>
#include <windows.h>
using namespace std;
typedef int semaphore; /* 信号量是一种特殊的整型变量 */
const int SIZE_OF_BUFFER = 5 ; //缓冲区长度
const unsigned short PRODUCERS_COUNT = 2; //生产者的个数
const unsigned short CONSUMERS_COUNT = 3; //消费者的个数
DWORD producers[PRODUCERS_COUNT] ; //生产者线程的标识符
DWORD consumers[CONSUMERS_COUNT] ;//消费者线程的标识符
const unsigned short THREADS_COUNT = PRODUCERS_COUNT+CONSUMERS_COUNT; //总的线程数
/**
*定义信号量
*/
HANDLE mutex ; //互斥信号量
HANDLE full ; //表示放有产品的缓冲区数,其初值为0
HANDLE empty ; //表示可供使用的缓冲区数,其初值为N
/**
*定义共享缓冲区
*/
semaphore buffer[SIZE_OF_BUFFER];
/**
*定义生产者和消费者使用的指针
*/
int in = 0 ;
int out = 0 ;
int productNum = 0 ;
DWORD WINAPI Producer(LPVOID) ;
DWORD WINAPI Consumer(LPVOID) ;
int main(int argc, char *argv[])
{
//创建Mutex和Semaphore
mutex = CreateMutex(NULL,FALSE,NULL);
full = CreateSemaphore(NULL,0,SIZE_OF_BUFFER,NULL);
empty = CreateSemaphore(NULL,SIZE_OF_BUFFER,SIZE_OF_BUFFER,NULL);
HANDLE PVThreads[THREADS_COUNT]; //各线程的handle
//创建生产者线程
for (int i=0;i<PRODUCERS_COUNT;i++){
PVThreads[i] = CreateThread(NULL,0,Producer,NULL,0,&producers[i]);
if (PVThreads[i] == NULL) break;
}
//创建消费者线程
for (int i=0;i<CONSUMERS_COUNT;i++){
PVThreads[PRODUCERS_COUNT+i]
=CreateThread(NULL,0,Consumer,NULL,0,&consumers[i]);
if (PVThreads[i]==NULL) break;
}
bool isContinue = true ;
while(isContinue)
{
if(getchar()){ //按回车后终止程序运行
isContinue = false;
}
}
system("PAUSE");
return 0;
}
void enBuffer(int pos)
{
cout<<"正在生产产品..."<<endl ;
Sleep(2000) ;
buffer[pos] = -1 ;
productNum++ ;
cout<<"生产完成! 已生产"<<productNum<<"个产品,并将新产品放在了缓冲区位置:"<<pos<<endl ;
}
void deBuffer(int pos)
{
cout<<"正在消费产品..."<<endl ;
Sleep(1000) ;
buffer[pos] = -2 ;
productNum-- ;
cout<<"已消费在缓冲区位置:"<<pos<<"的产品,缓冲区剩余空间:"<<SIZE_OF_BUFFER-productNum<<endl ;
cout<<endl ;
}