下载此文档

操作系统课程设计-售票员与乘客(信号量操作).doc


文档分类:IT计算机 | 页数:约19页 举报非法文档有奖
1/19
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/19 下载此文档
文档列表 文档介绍
操作系统课程设计
实验报告书
题目:
售票员与乘客(信号量操作)
题目编号:
2
院系:
计算机科学与技术软件服务与外包学院
班级:
11级9班
小组成员:
组长:
学号:
组员:
学号:
组员:
学号:
2013-06-30
目录
一、课程设计任务划分 1
(一)课程内容 2
(二)算法 2
(三)算法基本原理 2
三、基本思路 4
(一)变量 4
(二)所用函数 5
(三)流程图 9
四、调试及实验结果 14
五、个人体会 15
一、课程设计任务划分
组员
具体分工
沈菲菲
网上搜索程序资料
程序合并
实验报告书书写
杨扬
程序调试
设计项目流程
心得体会
二、基本原理
(一)课程内容
编程序模拟车站售票厅内进程同步问题,售票厅任何时刻最多可容纳20名购票者进入,否则需要在外面等待。每个购票者可看成一个进程。
(二)算法
信号量与P,V操作
(三)算法基本原理
生产者-消费者问题是一个经典的线程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。在同一个线程地址空间内执行的两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。
多个生产/消费者在有界缓冲上操作。它利用N个字节的共享内存作为有界循环缓冲区,利用写一字符模拟放一个产品,利用读一字符模拟消费一个产品。当缓冲区空时消费者应阻塞睡眠,而当缓冲区满时生产者应当阻塞睡眠。一旦缓冲区中有空单元,生产者线程就向空单元中入写字符,并报告写的内容和位置。一旦缓冲区中有未读过的字符,消费者线程就从该单元中读出字符,并报告读取位置。生产者不能向同一单元中连续写两次以上相同的字符,消费者也不能从同一单元中连续读两次以上相同的字符。
因此售票员与乘客也可转化为生产者与消费者的问题,第一步:确定进程间的关系。售票厅是各进程共享的公有资源,当售票厅中多于20名购票者时,厅外的购票者需要在外面等待。所以进程间是互斥的关系。第二步:确定信号量及其值。只有一个公有资源:售票厅,所以设置一个信号量s。售票厅最多容纳20个进程,即可用资源实体数为20,s的初值就设为20。
实现:begin
s:semaphore;
s:=20;
cobegin
process PI(I=1,2,……)
begin P(s);
进入售票厅;
购票;
退出;
V(s);
end;
coend
当购票者进入售票厅前要执行P(s)操作,执行后若s大于或等于零,说明售票厅的人数还未满可进入。执行后若s小于零,则说明售票厅的人数已满不能进入。这个实现中同时最多允许20个进程进入售票厅购票,其余进程只能等待。
三、基本思路
(一)变量
#define N 2 // 乘客或售票员的数目
#define M 20 // 售票厅大小
int in = 0; // 售票员售票的位置
int out = 0; // 乘客买票的位置
int buff[M] = {0}; // 售票厅初始化为0, 开始时没有售票员
sem_t empty_sem; // 同步信号量, 当满了时阻止售票员售票
sem_t full_sem; // 同步信号量, 当没售票员时阻止乘客买票
pthread_mutex_t mutex; // 互斥信号量, 一次只有一个线程访问缓冲
int conductor_id = 0; //售票员id
int passenger_id = 0; //乘客id
(二)所用函数
1. void print() 打印售票厅情况
2. void *conductor () 售票员方法
3. void *passenger () 乘客方法
4. int main() 主方法
5. sem_wait()
函数原形:
int sem_wait(sem_t *sem);
参数:
sem 指向信号灯的指针
返回值:
若成功则返回0,否则返回-1。
我们能用sem_wait来申请共享资源,sem_wait函数能测试所指定信号灯的值,如果该值大于0,那就将他减1并即时返回。我们就能使用申请来的共享资源了。如果该值等于0,调用线程就被进入睡眠状态,直到该值变为大于0,这时再将他减1,函数随后返回。sem_wait操作必须是原子的。
6. sem_post()
挂出共享资源
函数原形:
int se

操作系统课程设计-售票员与乘客(信号量操作) 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数19
  • 收藏数0 收藏
  • 顶次数0
  • 上传人799474576
  • 文件大小0 KB
  • 时间2013-08-30