- 课程设计题目
1、设计题目
设计任务
掌握信号量通信方式的一般方法,了解系统实现“阻塞”和“唤醒”功能的方法和技巧。同时掌握进程同步和互斥的概念及实现技术。
设计内容
(1)用语言编程实现P、V原语并用P、V原语描述如下理发师-顾客问题:
有一个理发师,一把理发椅和n把提供给等候理发的顾客座的椅子。如果没有顾客,则理发师便在理发椅子上睡觉;当第一个顾客到来时,必须唤醒该理发师进行理发;如果理发师正在理发时又有顾客到来,则如果有空椅子可坐,他就坐下来等待,如果没有空椅子,他就离开理发店。
为理发师和顾客各编一段程序描述他们的行为,要求不能带有竞争条件,试用P、V操作实现。
(2)实验要求及说明
① 定义信号量并将P、V操作定义为带参数
② 以输出字符串的形式表示理发师和顾客的行为。
③ 设计适当的数据结构和函数描述顾客等待队列和“唤醒”理发师理发过程,以及没有顾客时的“阻塞”理发师过程。
④ 编程时需考虑理发师和顾客对应的程序是并发操作的。
提示:可利用随机函数模拟并发操作。
⑤ 理发师和顾客两个进程各自调用一个函数模拟生产及消费的操作。
2、题目分析
(1)在理发师问题中,其属于生产者-消费者(有界缓冲区)模型的一类。在此模型里,理发师与顾客之间存在进程的同步问题。其中,理发师充当生产者,顾客则为消费者,而生产者的生产速度(即理发师的理发速度)和消费者的消费速度(即顾客到达理发店的时间)必然是不一样的。题目中存在一个有界缓冲区,也就是有N把可供顾客坐着等候理发师的椅子。倘若顾客来得过快,能够先坐在椅子上等待理发师,然而一旦椅子坐满,此时顾客就会直接离开,放弃理发。这里的N即有界缓冲区的规模,一旦缓冲区无法容纳更多消费者,消费者便不再进行消费。
(2)在生产者-消费者(有界缓冲区)模型里,还存在进程间的互斥现象。例如,若多个消费者同时访问缓冲区,必然会改变缓冲区的状态,而缓冲区属于临界资源,多个消费者不能同时去更改缓冲区的状态。在这个问题中,就如同执行顾客任务的进程,必须进行互斥操作,同理,理发师改变缓冲区状态的操作也需要互斥。在这个问题里,缓冲区的状态指的是剩余等待的顾客数量,每当来一位顾客,等待理发的顾客数目便会增加1,而每当理发师完成一次理发,等待理发的顾客数目就会减少1。
二、问题解决方案
1、问题分析
(1)本问题是一个典型的生产者-消费者(有界缓冲区)模型,理发师为生产者,生产理发服务;顾客为消费者,消费理发服务。
(2)存在进程同步问题,即顾客到来和理发师工作的时机需要协调。
(3)存在进程互斥问题,对等待顾客数量这一缓冲区状态的修改需要互斥。
2、解决方案
(1)使用信号量cust