生产者-消费者问题是很经典的线程同步问题,这段代码给出的是多生产者、多消费者、有界缓冲区的一个C++实现。
常见的生产者消费者实现一般是Unix或Linux下的使用Pthread完成的,这里使用WINDOWS环境下的API实现。
#include<iostream>
#include<queue>
#include<Windows.h>
#include<unordered_map>
using namespace std;
static const int QUEUE_SIZE = 10;
static HANDLE semEmpty = NULL;
static HANDLE semFull = NULL;
static const int PRODUCER_SIZE = 3;
static const int CONSUMER_SIZE = 10;
static HANDLE event = NULL;
static CRITICAL_SECTION queueMutex;//临界区锁,用于维护临界区,保护bufferQueue
static queue<int> bufferQueue;
static int goodsNum = 0;//当前生产商品的序号
unordered_map<DWORD,int> id;//hashmap用来记录线程id与进程序号的映射
DWORD WINAPI ProducerThread()
{
while (true)
{
if (WAIT_TIMEOUT != WaitForSingleObject