设为首页 加入收藏

TOP

1.2.1 互斥特性
2013-10-07 16:19:42 来源: 作者: 【 】 浏览:67
Tags:1.2.1 特性

1.2.1   互斥特性

为了证明旗子协议能够正确地解决Alice-Bob问题,首先必须理解正确的解决方案应该满足什么样的特性,然后再证明旗子协议能保证这些特性成立。

前面已证明两个宠物不会同时待在院子里,这种特性称为互斥。

然而,互斥只是所需的特性之一。如前面所提到的,Alice和Bob都不允许自己的宠物进入院子这样的协议也满足互斥特性,但对于他们的宠物来说这种协议却是不可接受的。下面分析另外一种重要特性。如果一个宠物想进入院子,则最终必会成功;如果两个宠物同时都想进入院子,则至少有一个能够成功。这种特性称为无死锁,它是解决Alice-Bob问题的基本特性。

可以断定上述Alice-Bob协议是无死锁的。假设两个宠物都想进入院子,于是Alice和Bob各自升起自己的旗子,Bob最终总会发现Alice的旗子是升起的,则会降下旗子暂缓自己的请求,从而让Alice的猫进入院子。

无饥饿(或无封锁)特性是一种必须关注的特性:如果一个宠物想进入院子,它最终能够成功吗?对此,Alice-Bob协议并不能完全保证。每当Alice和Bob发生冲突时,Bob都必须屈从Alice而暂缓自己的请求,因此,有可能出现这样的情形:Alice的猫一次又一次地进入院子,而Bob的小狗则一直窝在屋子里变得越来越焦躁。稍后,我们将会看到如何通过协议防止出现这种饥饿现象。

最后一种需要关注的特性就是等待。假设Alice升起自己的旗子,随后突发阑尾炎,于是她(带着她的猫)去了医院。手术成功之后,留院观察一周。虽然Bob为Alice的病情得以好转而松了一口气,但在Alice离开家里的这段日子里,Bob的小狗无法进入院子。问题的根源就在于协议中规定Bob必须等待Alice把旗子降下后才能把自己的小狗放出去。如果Alice被耽误了(即便理由是好的),Bob也会被延迟(没有什么理由)。

等待问题在容错中是非常重要的。通常情况下,希望在一段合理的时间内,Alice和Bob都能够及时地响应对方,但如果没有及时响应该怎么办?互斥的本质就是等待:无论一个互斥协议设计得多么巧妙,都无法避免等待。然而,大多数其他的协作问题无需等待就可以解决,有时甚至采用一些出乎预料的方法。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.1 共享对象和同步(2) 下一篇1.3 生产者-消费者问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·用 Python 进行数据 (2025-12-25 15:49:09)
·如何学习Python数据 (2025-12-25 15:49:07)
·利用Python进行数据 (2025-12-25 15:49:04)
·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)