第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/7/30 16:29:18 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

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<<\消费者\输出消费者的指针位置

大工18春《操作系统》大作业题目及要求答案.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c3eswf3qk6m8mpoj7ocb09o8y29wtcx00z21_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top