文档介绍://******************************************************************************//
//* 实验一 生产者消费者问题 *//
//******************************************************************************//
#include <windows.h>
#include <>
#include <iostream.h>
const unsigned short SIZE_OF_BUFFER = 10; //缓冲队列长度
unsigned short ProductID = 0; //产品号
unsigned short ConsumeID = 0; //将被消耗的产品号
unsigned short in = 0; //相当于缓冲单元指针,生产者进程每次将产品放入该指针指示的缓冲单元,并将指针后移一个缓冲单元
unsigned short out = 0; //相当于缓冲单元指针,消费者进程每次从该指针指示的缓冲单元取出产品,并将指针后移一个缓冲单元
typedef struct BufferType{
ﻩint productID;
ﻩint state; //0表示缓冲单元空,表示缓冲单元满(有产品)
}Buffer;
Buffer g_buffer[SIZE_OF_BUFFER]; //缓冲队列(作为循环队列使用)
bool g_continue = true; //控制程序结束
HANDLE g_hMutex; //线程间互斥的信号量
HANDLE g_hEmptySemaphore; //线程间同步的信号量
HANDLE g_hFullSemaphore; //线程间同步的信号量
DWORD WINAPI Producer(LPVOID); //生产者线程
DWORD WINAPI Consumer(LPVOID); //消费者线程
int main()
{
//创建互斥的信号量和同步的信号量
g_hMutex = CreateMutex(NULL,FALSE,NULL);
g_hEmptySemaphore = CreateSemaphore(NULL,SIZE_OF_BUFFER,SIZE_OF_BUFFER,NULL);
g_hFullSemaphore = CreateSemaphore(NULL,0,SIZE_OF_BUFFER,NULL);
//调整下面的数值,可以发现,当生产者个数多于消费者个数时,生产速度快,生产者经常等待消费者;反之,消费者经常等待
const unsigned short PRODUCERS_COUNT = 3; //要创建的生产者线程的个数
const unsigned short CONSUMER