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

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

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统课程设计实现生产者消费者问题精品

《操作系统》课程设计 实现生产者消费者问题 一、课程设计的性质与任务在多进程(线程)运行环境中,进程(线程)之间并发执行,如果对进程(线程)访问临界资源(如公共变量)的操作不加限制,就会产生“与时间有关”的错误。为防止这类错误,必须用同步机构控制进程(线程)对临界资源(公共变量)的访问。 本实验利用Windows系统提供的同步机制,来协调线程(Thread)间的并发执行,以加深对同步机制的理解,并学会在并发程序中引用同步机构的编程方法。 二、课程设计的内容及其要求 三、课程设计的 四、 SIGNAL原语的操作主要动作是: sem加1; 若相加结果大于零,进程继续执行; 若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。 SIGNAL原语的功能框图如图: 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; } //把新生产的产品放入缓冲区 void Append() { cerr \n把新生产的产品放入缓冲区 ... \n; g_buffer[in] = ProductID; in = (in+1)%SIZE_OF_BUFFER; //把下一个生产的产品放入下一个缓冲区 //输出缓冲区当前的状态 cout \n显示缓冲区当前的状态:\n\n; cout \n缓冲区编号产品编号\n; for (int i=0;iSIZE_OF_BUFFER;++i){ cout 缓冲区 i : g_buffer[i];

文档评论(0)

bodkd + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档