该算法的工作过程如下:当一个进程要访问共享资源时,它会构造一个消息,其中包含要访问的资源的名字、其进程号、当前时间戳;然后它将该消息发送给系统中的所有其他进程;当一个进程接收到来自另一个进程的请求消息时,它根据自己与消息中的资源相关的状态来决定它要采取的动作:
1)如果接收者没有访问资源,而且也没有访问的打算,就会给发送者一个OK消息;
2)如果接收者已获得对资源的访问,那么他就不进行应答(或者回复拒绝消息),并把该请求放到队列中;
3)如果接收者想访问资源,但是还没开始访问呢,这个时候它就会把自己的请求的时间戳与接收到消息的时间戳做对比,时间戳小者胜出。
发送请求许可消息发出后,进程就会进入等待状态,直到所有进程回复OK;一旦满足条件后就进入访问操作,访问结束后,会把释放消息发送给其维护的等待队列中的所有要访问的进程;同时把他们从队列中删除。
如图1,进程0和2同时发出访问请求,进程0的请求时间是8,进程2的请求时间是12。
进程1在接收到请求后,由于其不会访问资源,所有给所有请求都回复OK,同时进程0和进程2则进入判定环节,进程2判定进程0的请求时间戳为8小于12,就给0回复OK;进程0判定时间戳12小于自己的请求时间戳,就把进程2的请求放入队列;此时,进程0接收到了所有进程返回的OK,则进入到访问资源环节,如图2;
当进程0访问结束后,它将2的请求从其队列中删除,同时给2发送OK消息,进程2此时获取到了所有进程返回OK,进入到访问资源环节,如图3.
每个请求需要2(n-1)个消息的发送量。
时间: 2024-11-03 22:19:33