源代码如下:
//宏定义
#define BUFFER 20 //缓冲区大小
//头文件
#include<windows.h>
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
unsigned short ProductID = 0; //产品号
unsigned short ConsumeID = 0; //将被消耗的产品号
unsigned short in = 0; //产品进缓冲区时的缓冲区下标
unsigned short out = 0; //产品出缓冲区时的缓冲区下标
int g_buffer[BUFFER]; //缓冲区
bool g_continue = true; //控制程序结束
HANDLE g_hMutex; //用于线程间的互斥
HANDLE g_hFullSemaphore; //当缓冲区满时迫使生产者等待
HANDLE g_hEmptySemaphore; //当缓冲区空时迫使消费者等待
DWORD WINAPI Producer(LPVOID); //生产者线程
DWORD WINAPI Consumer(LPVOID); //消费者线程
int main(int argc,char* argv[])
{
g_hMutex = CreateMutex(NULL, FALSE, NULL);
g_hFullSemaphore = CreateSemaphore(NULL, BUFFER, BUFFER, NULL);
g_hEmptySemaphore = CreateSemaphore(NUL