《操作系统概念》第七版
实验项目:生产者消费者问题
实验目的:
使用 C++ 语言和互斥锁实现生产者消费者问题。
本程序中, main() 函数需要三个参数:主线程休眠时间;生产者线程数;消费者线程数。各
线程的休眠等待时间是随机的。 (main 函数结束时未使用休眠,切休眠等待时间使用了固定
值,便于观察)
编程环境:
使用 win32 互斥锁进行了编程。 环境为 windows8.1 操作系统, IDE 为 visual studio 2013 。
程序设计思想:
临界区中实现生产与消费,使用两个缓存数组,一个记录产品号一个记录产品分配的随
机数,便于观察。线程函数与信号函数均使用 windows.h 中的 win32 函数。借助书上的例子
完成设计。
代码实现 :
/*buffer.h*/
typedef int buffer_item ;
#define SIZE_OF_BUFFER 10 // 缓冲区长度
int insert_item();
int remove_item();
#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <buffer.h>
unsigned short ProductID = 0; // 产品号
unsigned short ConsumeID = 0; // 将被消耗的产品号
unsigned short in = 0; // 产品进缓冲区时的缓冲区下标
unsigned short out = 0; // 产品出缓冲区时的缓冲区下标
int g_buffer[ SIZE_OF_BUFFER]; // 缓冲区是个循环队列
buffer_item rand_buffer[ SIZE_OF_BUFFER]; // 储存随机数
bool g_continue = true ; // 控制程序结束
HANDLE g_hMutex; // 用于线程间的互斥
HANDLE g_hFullSemaphore; // 当缓冲区满时迫使生产者等待
HANDLE g_hEmptySemaphore; // 当缓冲区空时迫使消费者等待