没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
24页
通过研究Linux的线程机制和信号量实现生产者消费者(Bounded Buffer)问题的并发控制。 实验条件要求:每人一台与Linux主机联网的Windows主机,普通用户权限。 (1) 每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、当前指针位置和生产者/消费者线程的标识符。 (2) 生产者和消费者各有两个以上。 (3) 多个生产者或多个消费者之间须共享对缓冲区进行操作的函数代码。
资源推荐
资源详情
资源评论
目录
1 设计题目与要求............................................................................................................................................. 1
.1 课程设计题目....................................................................................................................................... 1
.2 课程设计要求....................................................................................................................................... 1
2 总体设计........................................................................................................................................................ 1
.3 设计背景............................................................................................................................................... 1
.4 设计思想............................................................................................................................................... 1
.4.1 创建一个线程........................................................................................................................... 1
.4.2 信号量....................................................................................................................................... 2
.4.3 设计原理................................................................................................................................... 2
.5 开发工具的选择................................................................................................................................... 3
.6 数据结构和模块说明........................................................................................................................... 3
.6.1 主函数....................................................................................................................................... 4
.6.2 生产者线程函数....................................................................................................................... 5
.6.3 消费者线程函数....................................................................................................................... 6
3 详细设计........................................................................................................................................................ 6
.7 源程序................................................................................................................................................... 6
4 运行结果与运行情况................................................................................................................................... 11
5 调试记录...................................................................................................................................................... 22
6 自我评析和总结........................................................................................................................................... 22
参考文献......................................................................................................................................................... 23
武汉理工大学《操作系统》课程设计说明书
实现生产者消费者(
)问题
设计题目与要求
课程设计题目
实现生产者消费者()问题。
课程设计要求
通过研究 的线程机制和信号量实现生产者消费者()问题的
并发控制。
实验条件要求:每人一台与 主机联网的 主机,普通用户权限。
每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、
当前指针位置和生产者/消费者线程的标识符。
生产者和消费者各有两个以上。
多个生产者或多个消费者之间须共享对缓冲区进行操作的函数代码。
总体设计
设计背景
系统下的多线程遵循 线程接口,称为 !"。编写 下的多线
程程序,需要使用头文件 !"!,连接时需要使用库 !""。顺便说一下,
下 !" 的实现是通过系统调用 #()来实现的。#()是 所特
有的系统调用,它的使用方式类似 $%。
多线程的编程具有如下优点:
提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,
整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线
程技术,将耗时长的操作( #&)置于一个新的线程,可以避免这种尴尬
的情况。
使多 '( 系统更加有效。操作系统会保证当线程数不大于 '( 数目时,不同的线
程运行于不同的 '( 上。
改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或
半独立的运行部分,这样的程序会利于理解和修改。
) 设计思想
先来介绍下相关的技术:
) 创建一个线程
函数 !"*#" 用来创建一个线程,它的原型为:
1
武汉理工大学《操作系统》课程设计说明书
!"*#" !"* +** !", **# !"*" *
+**" ,-++** " * -+,-+**"&
第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是
线程运行函数的起始地址,最后一个参数是运行函数的参数。这里,我们的 函数 !"
不需要参数,所以最后一个参数设为空指针。第二个参数我们也设为空指针,这样将生
成默认属性的线程。对线程属性的设定和修改我们将在下一 节阐述。当创建线程成功时,
函数返回 .,若不为 . 则说 明 创 建 线 程 失 败 , 常 见 的 错 误 返 回 代码 为 /0102 和
/230。前者表示系统限制创建新的线程, 例如线程数目过多了;后者表示第二个参数
代表的线程属性值非法。创建线程成功后,新创建的线程则运行参数三和参数四确定的
函数,原来的线程则继续运行下一 行代码。
) 信号量
信号量的数据类型为结构 * ,它本质上是一个长整型的数。函数 * ()
用来初始化一个信号量。它的原型为:
* ** * +**, **!", &
**-"4
为指向信号量结构的一个指针;!" 不为0时此信号量在进程间共享,否
则只能为当前进程的所有线程共享;-" 给出了信号量的初始值。
函数 * * +用来增加信号量的值。当有线程阻塞在这个信号量
上时,调用这个函数会使其中的一个线程不在阻塞,选择机制同样是由线程的调度策略
决定的。
函数 *" * +被用来阻塞当前线程直到信号量 的值大于 .,
解除阻塞后将 的值减一,表明公共资源经使用后减少。函数 * 5" *
+是函数 *" ()的非阻塞版本,它直接将信号量 的值减一。
) 设计原理
图 生产者消费者问题的图解描述
本文使用 3 操作的基本原理来实现生产者消费者问题。用伪代码描述如下:
"&
!"" ":
6.74
"! 8499用于互斥地访问缓冲区
"!$8.499满缓冲区
"! 58.499空缓冲区
#:99生产者线程
&
2
武汉理工大学《操作系统》课程设计说明书
;
#" 4
5499等待空缓冲区
499给缓冲区加锁
" ! 4
3 499释放互斥锁
3$499增加一个满缓冲区
<!4
4
#:99消费者线程
&
;
$499取走一个满缓冲区
499给缓冲区加锁
-" $4
3 499释放互斥锁
3 5499增加一个空缓冲区
# ! 4
<!4
4
"4
= 开发工具的选择
操作系统:
语言:/&!(()
工具:&>>,-,&"5
? 数据结构和模块说明
本程序使用数组来作为缓冲区的数据结构。下面是几个主要函数的流程图。
3
武汉理工大学《操作系统》课程设计说明书
? 主函数
图 2 主函数流程图
4
剩余23页未读,继续阅读
资源评论
- lubing5212013-04-03是武汉理工大学的一个课程设计.内容详实
- Enda01152014-01-05非常有用,值得下载。
tengzhao203
- 粉丝: 3
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功