互斥算发
应用层协议
- enter() 进入临界区——如必要则阻塞
- resourceAccess() 在临界区访问共享数据
- exit() 离开临界区——其他进程现在可以进入
互斥的基本要求
- ME1(安全性)
- 在临界区(CS)一次最多有一个进程可以执行
- ME2(活性)
- 进入和离开临界区的请求最终执行成功
- 无死锁也无饥饿。死锁涉及两个或多个进程,由于互相依赖而试图进入或离开临界区时被无期限的锁住
- 即使一个差的算法也可能引发饥饿问题,进程的进入请求被无限的推迟
- 没有饥饿问题是一个公平性条件。
- 另一个公平性问题是进程进入临界区的顺序。
- ME3(——>顺序)
- 如果一个进入CS的请求发生在先,那么进入CS仍按此顺序
- 如果一种解决方案用发生在先顺序来赋予临界区的进入,并且如果所有请求都按发生在先建立联系,那么在其他进程等待时,一个进程就不可能进入临界区多于一次。
- 这种顺序也允许进程协调它们对临界区的访问。
- 一个多线程的进程可以在一个线程等待被准入临界区。
- ME3指定第一个进程在第二个进程之前被准入临界区。
算法评价
- 消耗的带宽,与在每个进入和退出操作中发送的消息数成比例。
- 每一次进入和退出操作由进程导致的客户延迟。
- 算法对系统吞吐量的影响,这是在假定后续进程间的通信是必要的条件下,进程整体访问临界区的比率。
- 用一个进程离开临界区和下一个进程进入临界区之间的同步延迟来衡量着这个影响,当同步延迟较短,吞吐量较大。
分布式互斥算法说明
分布式系统中的互斥算法主要设计思路是通过协调多个进程之间的通讯和操作来实现对共享资源的互斥访问。其中,临界区是指程序的一部分,该部分需要互斥执行以保证程序正确性。
在分布式系统中实现临界区互斥访问的常用算法包括 Lamport 的分布式时间戳算法、Maekawa 的旋转标记算法等。这些算法通过消息传递和进程协作来达到目标,具体实现过程中,每个进程都会维护自己的状态信息,并通过消息传递与其他进程进行通信。当一个进程需要访问共享资源时,它会发送请求消息给其他进程,并等待其他进程的响应消息。如果其他进程没有正在访问共享资源,则它会授权该进程访问,并向其他进程广播释放资源的消息;如果其他进程正在访问共享资源,则该进程将等待直到可以访问为止。
通过这样的方式,分布式系统中的互斥算法可以保证多个进程对共享资源的互斥访问,从而确保系统的正确性和可靠性。
分布式系统中的互斥算法主要设计思路是通过协调不同节点之间的行为来实现对共享资源的互斥访问。以下是两种常见的互斥算法设计思路:
- 基于中心节点的算法:其中一个节点作为中心节点,其他节点需要向它发送请求并等待响应。中心节点负责协调所有请求,确保每个节点按照指定的顺序访问共享资源。这种算法的缺点是中心节点成为了单点故障,如果中心节点失效,则整个系统将无法工作。
- 基于分布式锁的算法:每个节点都可以申请获取分布式锁来访问共享资源,获取锁的节点可以独占资源并执行相应的操作。由于锁是分布式的,因此任何一个节点都可以释放锁。这种算法的优点是没有中心节点,系统具有良好的容错性能和可扩展性,但是在高负载情况下可能会出现竞争问题,从而导致性能下降。