课程设计报告课程名称:操作系统实验题目:用多进程同步方法解决生产者-消费者问题院系:计算机科学与工程学院班级:姓名:学号:指导老师:一、概述:1、问题描述:用多进程同步方法解决生产者-消费者问题设计目的:通过研究Linux的进程机制和信号量实现生产者消费者问题的并发控制
说明:有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1-20这20个整型数
设计要求:1)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符
2)生产者和消费者各有两个以上
3)多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码
2、程序设计基本思想:生产者—消费者问题是一种同步问题的抽象描述
计算机系统中的每个进程都可以消费或生产某类资源
当系统中某一进程使用某一资源时可以看作是消耗,且该进程称为消费者
而当某个进程释放资源时,则它就相当一个生产者
一个有限空间的共享缓冲区,负责存放货物
生产者向缓冲区中放物品,缓冲区满则不能放
消费者从缓冲区中拿物品,缓冲区空则不能拿
因为有多个缓冲区,所以生产者线程没有必要在生成新的数据之前等待最后一个数据被消费者线程处理完毕
同样,消费者线程并不一定每次只能处理一个数据
在多缓冲区机制下,线程之间不必互相等待形成死锁,因而提高了效率
多个缓冲区就好像使用一条传送带替代托架,传送带上一次可以放多个产品
生产者在缓冲区尾加入数据,而消费者则在缓冲区头读取数据
当缓冲区满的时候,缓冲区就上锁并等待消费者线程读取数据;每一个生产或消费动作使得传送带向前移动一个单位,因而,消费者线程读取数据的顺序和数据产生顺序是相同的
可以引入一个count计数器来表示已经被使用的缓冲区数量
用Producer和Consumer来同步生产者和消费者线程
每当生产者线程发现缓冲区满(count=Buffer