哲学家就餐问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

管程机制
1. 管程可以看做一个软件模块,它是将共享 的变量和对于这些共享变量的操作封装起 来,形成一个具有一定接口的功能模块, 进程可以调用管程来实现进程级别的并发 控制。 2. 进程只能互斥的使用管程,即当一个进程 使用管程时,另一个进程必须等待,当一 个进程使用完管程后,它必须释放管程并 唤醒等待管程的另一个管程。
一、哲学家就餐问题与C语言:
• 死锁问题
• 其实呢,这个问题在我们计算机中也经常遇到, 用户需要的特定信息由几部分组成,而几个用户 各掌握了特定信息的一部分,彼此不放手,导致 持续的等待我们称之为死锁。在我们学习了哲学 家就餐问题之后,我们可以轻松地解决这个问题
死锁问题解决方法:
(1)至多只允许四个哲学家同时进餐,以保证至少有一个哲学家 能够进餐,最终总会释放出他所使用过的两支筷子,从而可 使更多的哲学家进餐. (2)仅当哲学家的左右两支筷子都可用时,才允许他拿起筷子 进餐. (3)规定奇数号的哲学家先拿起他左边的筷子,然后再去拿他 右边的筷子;而偶数号的哲学家则相反.按此规定,将是1,2号 哲学家竞争1号筷子,3,4号哲学家竞争3号筷子.即五个哲学 家都竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总 会有一个哲学家能获得两支筷子而进餐.
Chandy/Misra解法
• 1984年,K. Mani Chandy和J. Misra提出了哲学家就餐问题的另一个解 法,允许任意的用户(编号P1, ..., Pn)争用任意数量的资源。与迪科 斯彻的解法不同的是[来源请求],这里编号可以是任意的。 • 1.对每一对竞争一个资源的哲学家,新拿一个餐叉,给编号较低的哲 学家。每只餐叉都是“干净的”或者“脏的”。最初,所有的餐叉都 是脏的。 • 2.当一位哲学家要使用资源(也就是要吃东西)时,他必须从与他竞 争的邻居那里得到。对每只他当前没有的餐叉,他都发送一个请求。 • 3.当拥有餐叉的哲学家收到请求时,如果餐叉是干净的,那么他继续 留着,否则就擦干净并交出餐叉。 • 4.当某个哲学家吃东西后,他的餐叉就变脏了。如果另一个哲学家之 前请求过其中的餐叉,那他就擦干净并交出餐叉。 • 这个解法允许很大的并行性,适用于任意大的问题。
资源分级解法
• 另一个简单的解法是为资源(这里是餐叉)分配一个偏序 或者分级的关系,并约定所有资源都按照这种顺序获取, 按相反顺序释放,而且保证不会有两个无关资源同时被同 一项工作所需要。在哲学家就餐问题中,资源(餐叉)按 照某种规则编号为1至5,每一个工作单元(哲学家)总是 先拿起左右两边编号较低的餐叉,再拿编号较高的。用完 餐叉后,他总是先放下编号较高的餐叉,再放下编号较低 的。在这种情况下,当四位哲学家同时拿起他们手边编号 较低的餐叉时,只有编号最高的餐叉留在桌上,从而第五 位哲学家就不能使用任何一只餐叉了。而且,只有一位哲 学家能使用最高编号的餐叉,所以他能使用两只餐叉用餐 。当他吃完后,他会先放下编号最高的餐叉,再放下编号 较低的餐叉,从而让另一位哲学家拿起后边的这只开始吃 东西。
限制条件:(1)只有拿到两支餐叉时,哲学家才能吃到面。 (2)如果餐叉已在他人手里,则哲学家必须要等到他人吃完面之后才能拿到叉子 (3)任一哲学家在自己未拿到两支叉子吃饭之前,决不放下自己手中的叉子。
三种解法
服务生解法
资源分级解法
Chandy/Misra 解法
服务生解法
• 一个简单的解法是引入一个餐厅服务生,哲学家 必须经过他的允许才能拿起餐叉。因为服务生知 道哪只餐叉正在使用,所以他能够作出判断避免 死锁。 • 为了演示这种解法,假设哲学家依次标号为A至E 。如果A和C在吃东西,则有四只餐叉在使用中。B 坐在A和C之间,所以两只餐叉都无法使用,而D 和E之间有一只空余的餐叉。假设这时D想要吃东 西。如果他拿起了第五只餐叉,就有可能发生死 锁。相反,如果他征求服务生同意,服务生会让 他等待。这样,我们就能保证下次当两把餐叉空 余出来时,一定有一位哲学家可以成功的得到一 对餐叉,从而避免了死锁。
对立事件
• 对立事件的定义中的事件A与B不能同时发 生,且事件A与B中“必有一个发生”是指 事件A不发生,事件B就一定发生或者事件A 发生,事件B就不发生。如,投掷一枚硬币 ,事件A为正面向上,事件B为反面向上, 则事件A与事件B必有一个发生且只有一个 发生。所以,事件A与B是对立事件。
对立与互斥的关系
小学数学中
计算机中
哲学家供餐问题与数学 ——互斥
互斥事件
事件A和B的交集为空,A与B就是互斥事件 ,也叫互不相容事件。也可叙述为:不可 能同时发生的事件。如A∩B为不可能事件 (A∩B=Φ),那么称事件A与事件B互斥, 其含义是:事件A与事件B在任何一次试验 中不会同时发生。
例子
粉笔盒里有3支红粉笔,2支绿粉笔,1支黄 粉笔,现从中任取1支,记事件A为取得 红 粉笔,记事件B为取得绿粉笔,则A与B不能 同时发生,即A与B是互斥事件。
哲学家就餐问题
第五组:
付敏、陈小明、唐轲、梁晓华
刘爽、辛秘、张鑫、徐瑶瑶、宁丽娟
目录
引论 解决 引申
总结
数学餐馆
谁能解决店长提出的这个问, 就可以免费吃一顿午餐。
店长:荷兰学者Dijkstra
附加图示
哲学家就餐问题:假设有五位哲学家围坐在一张圆形餐桌旁,做 以下两件事情之一吃饭或者思考。吃东西的时候,他们就停止思考 ,思考的时候也停止吃东西。餐桌中间有一大碗意大利面,每两个 哲学家之间有一只餐叉。因为用一只餐叉很难吃到意大利面,所以 假设哲学家必须用两只餐叉吃东西。他们只能使用自己左右手边的 那与计算机操作系统:
利用信号量的保护机制实现通过信号 量mutex对eat()之前的取左侧和右侧筷 子的操作进行保护,使之成为一个原 子操作,这样可以防止死锁的出现。
信号量机制
• 信号量机制是为了实现在多道程序环境下实现进程的并发 执行而提出的一种进程同步工具。 • 信号量S是一个整数,当S大于零,代表可供使用的进程实 体数,当S小于零,代表正在等待使用的临界区的进程数 。 • P原语操作的动作:(1)S减1,(2)若S减1后仍大于或 等于零,则进程继续执行,若S减1后小于零,则该进程被 阻塞后进入与该信号相对应的队列中,然后转进程调度。 • V原语操作的动作:(1)S加1,(2)若相加结果大于零 ,则进程继续执行;(3)若相加结果小于或等于零,则 从该信号的等待队列中唤醒一等待进程,然后再返回原进 程继续执行或转进程调度。
资源分级解法 不利之处
• 尽管资源分级能避免死锁,但这种策略并不总是 实用的,特别是当所需资源的列表并不是事先知 道的时候。例如,假设一个工作单元拿着资源3和 5,并决定需要资源2,则必须先要释放5,之后释 放3,才能得到2,之后必须重新按顺序获取3和5 。对需要访问大量数据库记录的计算机程序来说 ,如果需要先释放高编号的记录才能访问新的记 录,那么运行效率就不会高,因此这种方法在这 里并不实用。 • 这种方法经常是实际计算机科学问题中最实用的 解法,通过为分级锁指定常量,强制获得锁的顺 序,就可以解决这个问题。
• 1.对立事件是互斥事件的特例,所以对 立事件一定是互斥事件; • 2.互斥事件不一定是对立事件,当且仅 当两个互斥事件必有一个发生时,它们 同时又是对立事件; • 3.互斥事件和对立事件均不能同时发生

哲学家就餐在计算机中的应用
哲学家就餐问题是在计算机科学中的一个 经典问题,用来演示在并行计算中多线程 同步(Synchronization)时产生的问题。在 1971年,著名的计算机科学家艾兹格· 迪科 斯彻提出了一个同步问题,即假设有五台 计算机都试图访问五份共享的磁带驱动器
相关文档
最新文档