操作系统课程设计实现生产者消费者问题.docVIP

操作系统课程设计实现生产者消费者问题.doc

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统课程设计实现生产者消费者问题

《操作系统》课程设计 实现生产者消费者问题 一、课程设计的性质与任务 在多进程(线程)运行环境中,进程(线程)之间并发执行,如果对进程(线程)访问临界资源(如公共变量)的操作不加限制,就会产生“与时间有关”的错误。为防止这类错误,必须用同步机构控制进程(线程)对临界资源(公共变量)的访问。 本实验利用Windows系统提供的同步机制,来协调线程(Thread)间的并发执行,以加深对同步机制的理解,并学会在并发程序中引用同步机构的编程方法。 二、课程设计的内容及其要求 有界缓冲区内设有10个存储单元,放入/取出的数据项设定为1~10这10个整形数。要求每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、当前指针位置和生产者/消费者标识符 三、课程设计的实验环境 Microsoft Visual C++ 四、正文 1、实验程序的结构图(流程图); WAIT原语操作的主要动作是: sem减1; 若sem减一后仍大于或等于零,则进程继续执行; 若sem减一后小于零,则该进程被阻塞后入与该信号相对应的队列中,然后转进程调度。 WAIT原语的功能框图如一: SIGNAL原语的操作主要动作是: sem加1; 若相加结果大于零,进程继续执行; 若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。 SIGNAL原语的功能框图如图: 2、数据结构及信号量定义的说明; 创建信号量: (1)创建各个互斥信号 g_hMutex = CreateMutex(NULL,FALSE,NULL); // 三个参数分别为:指向安全属性的指针 //初始化互斥对象的所有者,指向互斥对象名的指针 (2)创建缓冲区满的信号量 g_hFullSemaphore = CreateSemaphore(NULL,SIZE_OF_BUFFER-1,SIZE_OF_BUFFER-1,NULL); //四个参数分别为:表示是否允许继承、 //设置信号机的初始计数、设置信号机的 //最大计数、指定信号机对象的名称(-1是因为计数从0开始) (3)创建缓冲区空的信号量 g_hEmptySemaphore = CreateSemaphore(NULL,0,SIZE_OF_BUFFER-1,NULL); ReleaseSemaphore(hSemaphore, 1, NULL); 3、实验源程序关键算法; //为每一个生产者创建生产者线程 for(int i=0;iPRODUCERS_COUNT;++i){ hThreads[i]=CreateThread(NULL,0,Producer,NULL,0,producerID[i]); if (hThreads[i]==NULL) return -1; } //为每一个消费者创建消费者线程 for(int j=0;jCONSUMERS_COUNT;++j){ hThreads[PRODUCERS_COUNT+j]=CreateThread(NULL,0,Consumer,NULL,0,consumerID[j]); if (hThreads[j]==NULL) return -1; } while(g_continue){ if(getchar()){ //按回车后终止程序运行 g_continue = false; } } return 0; } //生产一个产品。简单模拟了一下,仅输出新产品的ID号 void Produce() { cerr -------------------------------------------------------------------\n; cerr 生产一个产品 编号为: ++ProductID ... endl; } //把新生

文档评论(0)

yurixiang1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档