大工18春《操作系统》大作业题目及要求答案 下载本文

3.3模块说明:

const unsigned short SIZE_OF_BUFFER = 10; //缓冲区长度

unsigned short ProductID = 0; //产品号 unsigned short ConsumeID = 0; //将被消耗的产品号

unsigned short in = 0; //产品进缓冲区时的缓冲区下标

unsigned short out = 0; //产品出缓冲区时的

缓冲区下标

int g_buffer[SIZE_OF_BUFFER]; //缓冲区是个循环队列 bool g_continue = true; //控制程序结束 HANDLE g_hMutex; //用于线程间的互斥 HANDLE g_hFullSemaphore; //当缓冲区满时迫使生产者等待

HANDLE g_hEmptySemaphore; //当缓冲区空时迫使消费者等待

DWORD WINAPI Producer(LPVOID); //生产者线程 DWORD WINAPI Consumer(LPVOID); //消费者线程

3.4源程序

#include #include

const unsigned short SIZE_OF_BUFFER = 20;//有界缓冲区长度 int g_buffer[SIZE_OF_BUFFER];//开辟缓冲区,用数组表示,可以看成是一个循环队列

unsigned short ProductID = 0;//新生产出来的产品的产品号 unsigned short ConsumeID = 0;//被消耗的产品的产品号

unsigned short in = 0;//产品进缓冲区时的缓冲区下标,用于记录生产者的指针位置

unsigned short out = 0;//产品出缓冲区时的缓冲区下标,用于记录消费者的指针位置

bool g_continue = 1;//控制程序运行:1表示继续运行,0表示停止运行

HANDLE g_hMutex;//线程间的互斥信号量

HANDLE g_hFullSemaphore;//资源信号量:缓冲区满 HANDLE g_hEmptySemaphore;//资源信号量:缓冲区空 DWORD WINAPI Producer(LPVOID);//生产者线程 DWORD WINAPI Consumer(LPVOID);//消费者线程

const unsigned short PRODUCERS_COUNT=4;//生产者的个数 const unsigned short CONSUMERS_COUNT=3;//消费者的个数 const

unsigned

short

THREADS_COUNT=PRODUCERS_COUNT+CONSUMERS_COUNT;//总线程数

HANDLE hThreads[PRODUCERS_COUNT];//各线程的handle DWORD producerID[CONSUMERS_COUNT];//生产者线程的标识符 DWORD consumerID[THREADS_COUNT];//消费者线程的标识符

/*----------------------------------------------------------*/

//生产一个产品,输出其ID号 void Produce() { }

/*----------------------------------------------------------*/

/*----------------------把新生产的产品放入缓冲区开始------------------------*/

//把新生产的产品放入缓冲区 void Append()

std::cout<

std::cerr<<\生产一个产品: \std::cout<

{

std::cerr<<\把生产的产品送入缓冲区\g_buffer[in]=ProductID; in=(in+1)%SIZE_OF_BUFFER; std::cerr<

std::cout<<\缓冲区 产品 生产者/消费者\

//新产品放入缓冲区后,输出缓冲区当前的状态

for(int i=0;i

//输出缓冲区下标 if (i<10)

std::cout<

else

std::cout<

if(i==in) { }

if(i==out) {

if(g_buffer[i]<10)

std::cout<<\if(g_buffer[i]<10)

std::cout<<\

else

std::cout<<\

std::cout<<\生产者\输出生产者的指针位置

else

std::cout<<\

std::cout<<\消费者\输出消费者的指针位置