OS课程设计生产者-消费者问题2013.12.192问题简要描述和设计要求•基于线程的生产者-消费者的合作问题–其中(生产者)从外设获取数据进行生产–另外(消费者)消费后进行输出,并存储输出结果。•在Linux环境下使用POSIX库进行设计实现•鼓励使用QT进行图形化显示•根据情况决定是否进行答辩•可以2人一组,但不能超过2人,在报告中必须要有明确分工3问题具体描述和设计要求完成N个生产者和M个消费者线程之间的并发控制,N、M不低于30,数据发送和接收缓冲区尺寸不小于20个(每个产品占据一个)。其中生产者线程1、3、5、7、9生产的产品供所有奇数编号的消费者线程消费,只有所有奇数编号的消费者线程都消费后,该产品才能从缓冲区中撤销。其中生产者线程2、4、6、8、10生产的产品所有偶数编号的消费者线程都可消费,任一偶数编号消费者线程消费该消息后,该产品都可从缓冲区中撤销。其中11-20号生产者线程生产的产品仅供对应编号的消费者线程消费。其他编号生产者线程生产的产品可由任意的消费者线程消费。每个生产线程生产30个消息后结束运行。如果一个消费者线程没有对应的生产者线程在运行后,也结束运行。所有生产者都停止生产后,如果消费者线程已经没有可供消费的产品,则也退出运行。4设计目的•掌握并能够灵活使用线程机制•掌握并能够灵活使用同步互斥机制•了解并能够较灵活地使用IO技术pthread_mutex_trylock线程间的同步还有这样一种情况:线程A需要等某个条件成立才能继续往下执行,现在这个条件不成立,线程A就阻塞等待,而线程B在执行过程中使这个条件成立了,就唤醒线程A继续执行。在pthread库中通过条件变量(ConditionVariable)来阻塞等待一个条件,或者唤醒等待这个条件的线程。6基本分析:forexample•基于线程的生产者-消费者的合作问题–其中(生产者)从外设获取数据进行生产–另外(消费者)消费后进行输出,并存储输出结果1:定义读入的(数据)的格式、定义(生产)的动作。2:定义定义(消费)的动作、输出的(数据)的格式。问题:需要定义几种???7更进一步的分析:forexample•基于线程的生产者-消费者的合作问题–其中一组线程(生产者)从外设获取数据进行生产–另外一组线程(消费者)消费后进行输出,并存储输出结果1:你设计的生产者和消费者是工作在本地还是远端?2:数据是从硬盘的文件上读取还是从键盘上获得?读取一个相同的文件是读一部分还是整体?(比如一个文件,包括三部分:用户ID、请求动作、正文)3:消费者对数据做何种处理(加密、解密或者计算等)?以何种方式实现?4:用户如何获得相关信息?。。。。。。。。。。。分析不同,设计也就不同分析不同,你的最终程序的实用价值也就不同8设计的要点使用哪一种IPC机制?如何工作?使用哪一种同步互斥机制?如何工作?文件有格式还是无格式?效率如何?如何进行测试?如何对保存测试信息?。。。。。。。。。。。设计不同,你的应用程序的健壮行、效率、可扩展性、用户方便性也就不同9设计报告格式设计目标背景知识说明原理相关函数说明设计设计环境(例如:面向何种用户、网络通信、内存大小等)概要设计----图详细设计和实现思路实现---图重要代码注释测试测试数据文件格式运行结果分析(是否满足上面的要求了?)总结参考源代码请同学们按流程进行工作准备、完成设计和报告