分布式系统的基础是多进程之间的并发与协作,这就不可避免的涉及到多个进程对共享资源的互斥访问。
在单系统中,进程间对共享资源的互斥访问可以通过信号量、互斥锁来很容易的实现互斥;
在分布式系统中可能会稍微复杂一点,有些互斥算法的大体思想和单系统中的互斥锁比较类似(比如令牌);但是分布式系统中还有其他更多的互斥方法;
分布式互斥算法可以分为两种不同类型:
1)基于令牌的解决方法,互斥是通过进程之间传递一个特殊的消息来实现的,我们称之为令牌,只有获得该令牌的进程才准许访问共享资源,访问完成后令牌传递给下一个进程;如果一个进程获得到令牌后并不需要访问共享资源,那么它就简单的把令牌传递给下一个进程即可。
2)基于许可的解决办法,一个进程要访问共享资源,就需要首先获得其他进程的许可。
下边我们来学习一下集中式算法:顾名思义我们就可以想象到,系统中有一个协作者统一管理对共享资源的访问,只有获取到协作者的允许,才能去访问共享资源,访问完成后需要及时知会协作者。
如图1所示,在此系统中,3作为协作者,来统一管理对共享资源的访问。在某一时刻,进程1向协作者3发起对共享资源的访问请求,此时协作者检测到没有其他进程在访问共享资源,就给进程1回复OK,允许其访问。