操作系统课程设计报告
题目:生产者消费者问题
专班学姓
业:级:号:名:
网络工程网络111201110314003吴超
上海海事大学信息工程学院
2013年12月15日
f目
录
1课程设计任务描述与要求12系统总体结构描述和主要数据结构说明23课程设计报告内容24总结13附录程序使用说明错误!未定义书签。
f操作系统课程设计
1课程设计任务描述与要求
11任务描述程序首先读入data文件,根据文件内容建立相应数量的线程,类型为P的线程为生产者,类型为C的线程为消费者;建立一个链表,作为缓冲区,用来存放生产者生产的产品,每个产品占用一个链表结点,消费者从该链表中读取产品信息。12任务要求每个线程根据文件中定义的等待时间,调用Sleep()函数休眠,然后根据“生产或消费产品的数量”字段生产或消费产品;若链表中无产品可以消费,那么消费者需要等待。每次放入或消费产品成功后,向result结果文件中写入一行记录,记录格式如下:线程编号、类型、本次生产或消费产品的数量。生产者和消费者信息存放在data文件中,格式如下:1P332C523P814P725C826C93各数据的含义如下:线程编号类型等待时间生产或消费产品的数量(秒)13P(生产者)322C(消费者)531P(生产者)843P(生产者)752C(消费者)863C(消费者)12
1
f操作系统课程设计
2系统总体结构描述和主要数据结构说明
21系统总体结构描述设计了两个主要函数:生产者函数、消费者函数;设计了三个信号量:full信号量,判断缓冲区是否有值,初值为0;empty信号量,判断缓冲区是否有空缓冲区,初值为缓冲区数;mutex信号量作为互斥信号量,用于互斥的访问缓冲区。生产者函数通过执行P操作信号量empty减1,判断缓冲区是否有空。有空则互斥的访问缓冲区并放入数据,然后释放缓冲区,执行操作,信号量full加1。消费者函数执行P操作,信号量full减1,判断是否有数据,有则互斥的访问缓冲区并取走数据,然后释放缓冲区,执行操作,empty信号量加1。
3课程设计报告内容
31模块功能该实验主要分为三大模块1主程序,创建并控制程序的流程,其中控制线程的活动以及信号量的操作,如图311所示;2生产者模块:生产者对缓冲区的操作,如图312所示;3消费者模块:消费者对缓冲区的操作,如图313r