没有合适的资源?快使用搜索试试~ 我知道了~
用多线程同步方法解决生产者-消费者问题
5星 · 超过95%的资源 需积分: 16 34 下载量 32 浏览量
2011-03-07
14:14:55
上传
评论 2
收藏 177KB DOC 举报
温馨提示
试读
15页
有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1~20这20个整型数。 1.每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、当前指针位置和生产者/消费者线程的标识符; 2.生产者和消费者各有两个以上; 3.多个生产者或多个消费者之间须共享对缓冲区进行操作的函数代码。
资源推荐
资源详情
资源评论
目 录
第 章 需求分析
1.1 课程设计题目.......................................................................................................................0
1.2 课程设计任务及要求...........................................................................................................0
1.3 软硬件运行环境及开发工具...............................................................................................1
1.3.2 软件及开发工具................................................................................................................1
第 章 总体设计思想
第 章 详细设计
3.1 文件系统结构.......................................................................................................................2
3.1.1 生产者—消费者系统结构........................................................................................2
3.1.2 生产者—消费者存储结构........................................................................................2
3.1.3 生产者—消费者线程状态........................................................................................2
3.1.4 系统调用函数............................................................................................................3
3.2 模块说明...............................................................................................................................3
3.3 主程序流程图.......................................................................................................................5
第 章 程序调试与操作说明
4.1 程序调试...............................................................................................................................6
4.2 操作说明...............................................................................................................................7
4.3 实验结果...............................................................................................................................7
第 章 课程设计总结与体会
参考文献
附录 源程序清单与注释
第 章 需求分析
课程设计题目
用多线程同步方法解决生产者-消费者问题
课程设计任务及要求
任务
通过研究 Linux 的线程机制和信号量实现生产者消费者问题的并发控制。
功能要求
有界缓冲区内设有 个存储单元,放入/取出的数据项设定为 这 个整型
数。
.每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、
当前指针位置和生产者/消费者线程的标识符;
武汉理工大学华夏学院《操作系统原理》课程设计报告书
.生产者和消费者各有两个以上;
.多个生产者或多个消费者之间须共享对缓冲区进行操作的函数代码。
软硬件运行环境及开发工具
硬件
pc 机一台。
软件及开发工具
RedHat Linux 下 GCC 编译器。
第 章 总体设计思想
通过一个有界缓冲区用数组来实现把生产者和消费者联系起来。假定生产者和消费
者是互相等效的,只要缓冲区未满,生产者就可以生产产品并将产品送入缓冲区。类似地
只要缓冲区未空,消费者就可以从缓冲区中去走产品并消费它。生产者和消费者的同步关
系将禁止生产者向满的缓冲区输送产品,也禁止消费者从空的缓冲区中提取物品。
在生产者消费者问题中,信号量具有两种功能:其一,它是跟踪资源的生产和消费的
计数器;其二,它是协调资源的生产者和消费者之间的同步器。消费者通过在一个指派给
它的信号量上调用函数 sem_wait()来表示消耗一个资源,而生产者通过在同一信号量上调
用函数 sem_post()来表示生产一个资源。该信号量的初始值是可利用的资源数目。当资源
不可利用时,将申请资源的线程放置在等待队列中。如果有一个资源释放,在等待队列中
的第一个线程被唤醒并得到资源的控制权。
为解决这一类生产者消费者问题,应该设置两个同步信号量:一个说明空缓冲区的数
目,用 表示,其初始值为有界缓冲区的大小 ;另一个说明满缓冲区(即信息)
的数目,用 表示,其初始值为 。本设计中生产者、消费者各 个,故它们在执行生
产活动和消费活动中要对有界缓冲区进行操作。由于有界缓冲区是一个临界资源,必须互
斥使用,所以,还需设置一个互斥信号量 ,其初值为 。
生产者要生产一个产品时,首先对资源信号量 和互斥信号量 进行 操
作,申请资源。如果可以通过的话,就生产一个产品,并把产品送入缓冲区。然后对互斥
信号量 和资源信号量 进行 操作,释放资源。
消费者要消费一个产品时,首先对资源信号量 和互斥信号量 进行 操作,
申请资源。如果可以通过的话,就从缓冲区取出一个产品并消费掉(即将缓冲区置 )。
然后对互斥信号量 和资源信号量 进行 操作,释放资源。如果缓冲区中已
经没有可用资源,就把申请资源的线程添加到等待队列的队尾。如果有一个资源被释放,
在等待队列中的第一个线程被唤醒并取得这个资源的使用权。
1
武汉理工大学华夏学院《操作系统原理》课程设计报告书
第 章 详细设计
3.1 文件系统结构
生产者—消费者系统结构
.缓冲区
缓冲区中有 个存储单元,每个存储单元存放一个产品(即产品号)。由于缓冲区
是临界资源,它只允许一个生产者放入产品,或者一个消费者从中取出产品。即生产者之
间、生产者与消费者之间、消费者之间都必须互斥使用缓冲区。所以必须设置互斥信号量
,它代表缓冲区资源,它的数值为 。
.同步问题
消费者线程不能往“满”的缓冲区中放入产品,设置信号量为 ,初始值为 ;
生产者线程不能从“空”的缓冲区中取出产品,设置信号量为 ,初始值为 。
生产者—消费者存储结构
!""缓冲区长度
#$%&'()""产品号
#*%+'()""将被消耗的产品号
##()""产品进缓冲区时的缓冲区下标
#%()""产品出缓冲区时的缓冲区下标
#,-$. !/)""缓冲区是个循环队列
#0()
#1()
2$344)""用于线程间的互斥
+4)""空缓冲区的数目
+4)""满缓冲区的数目
2$34$%&$'./)""生产者线程的标识符
2$34&%+$'./)""消费者线程的标识符
生产者—消费者线程状态
5%#6$%&$5%#6'; ""生产者线程
这个函数是生产者进行的生产过程,为所有的生产者所共享。指针用来接收生产
者线程创建时传来的信息(运行函数的参数)。
5%#6&%+$5%#6')""消费者线程
2
剩余14页未读,继续阅读
资源评论
- 五羊2013-12-23不知道程序代码怎么弄!
- cjz58182014-06-24就是我想要的,符合我的要求!操作系统的实训报告
Selina19871219
- 粉丝: 11
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功