分布式系统互斥算法---非集中式算法

集中式算法存在单点失效问题,那么我们接着来看一下非集中式算法。

假设共享资源副本被复制了n次,每个副本有其自身协作者控制访问;如果某个进程要访问共享资源,主要获得m>n/2个协作者投票允许即可。

如图1所示,如果进程0要发起访问请求,只要8个协作者中有5个(包括其自身)投票允许即可。

图1

但是该算法也有自身的缺陷,即当某个协作者崩溃时,它将忘记之前投过的票,可能在回复后又投了重复的票给其他请求者;比如已经允许了p进程访问共享资源,之后该协作者重置了,又允许了q进程去访问共享资源,此时可能会出现不一致问题。

为了防止有很多个进程同时发起访问请求导致谁也无法访问共享资源,发起访问的进程可以把请求带上时间戳,其他协作者按照时间戳的先后顺序进行投票允许,同时请求者还需要在访问结束后通知所有其他协作者访问已释放。

时间: 2024-08-12 15:16:25

分布式系统互斥算法---非集中式算法的相关文章

分布式体系结构之非集中式结构

非集中式结构核心协议:Gossip协议 原理: 每个节点周期性的才能够自己维护的集群节点列表中随机选择k个节点,将自己存储的信息发送给这k个节点,接收到该信息的节点,采用分布式共识原则,对收到的数据和本地数据进行合并,经过几个迭代周期之后,集群中所有节点的数据信息就一致了. 优点: 扩展性,可容错,去中心化,一致性收敛,简单 重复消息问题的优化: 每个节点记录当前传输消息且还未到达收敛市已经发送给了哪些节点,然后每次从没有发送过的节点列表中选择k个节点 非集中式结构典型案例 原文地址:https

分布式系统互斥算法---集中式算法

分布式系统的基础是多进程之间的并发与协作,这就不可避免的涉及到多个进程对共享资源的互斥访问. 在单系统中,进程间对共享资源的互斥访问可以通过信号量.互斥锁来很容易的实现互斥: 在分布式系统中可能会稍微复杂一点,有些互斥算法的大体思想和单系统中的互斥锁比较类似(比如令牌):但是分布式系统中还有其他更多的互斥方法: 分布式互斥算法可以分为两种不同类型: 1)基于令牌的解决方法,互斥是通过进程之间传递一个特殊的消息来实现的,我们称之为令牌,只有获得该令牌的进程才准许访问共享资源,访问完成后令牌传递给下

参数学习/非参数学习算法

参数学习算法(parametric learning algorithm) 定义:参数学习算法是一类有固定数目参数,以用来进行数据拟合的算法.设该固定的参数集合为.线性回归即使参数学习算法的一个例子 非参数学习算法(Non-parametric learning algorithm) 定义:一个参数数量会随m(训练集大小)增长的算法.通常定义为参数数量虽m线性增长.换句话说,就是算法所需要的东西会随着训练集合线性增长,算法的维持是基于整个训练集合的,即使是在学习以后.

C++笔试面试(算法题集三)

1>    编写strcpy函数,已知函数原型char*strcpy(char* strDest,char* strSrc) ANSWER: Chat* strcpy(char* strDest,char* strSrc) { If(strSrc==NULL)  return NULL; Char*ch1=strSrc,*ch2=strDest; While(*ch1!='\0') { *ch2++=*ch1++; } *ch2='\0'; Return strDest; } 2>    用递

PTA数据结构与算法题目集(中文) 7-16

PTA数据结构与算法题目集(中文)  7-16 7-16 一元多项式求导 (20 分) 设计函数求一元多项式的导数. 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数.数字间以空格分隔,但结尾不能有多余空格. 输入样例: 3 4 -5 2 6 1 -2 0 输出样例: 12 3 -10 1 6 0题目分析:要注意判断输入停止的标志 利用~scanf来判断 其它问题到没发现 (

PTA数据结构与算法题目集(中文) 7-36 社交网络图中结点的“重要性”计算 (30 分)

PTA数据结构与算法题目集(中文)  7-36 社交网络图中结点的“重要性”计算 (30 分) 7-36 社交网络图中结点的“重要性”计算 (30 分) 在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互作用,可以增强也可以减弱.而结点根据其所处的位置不同,其在网络中体现的重要性也不尽相同. “紧密度中心性”是用来衡量一个结点到达其它结点的“快慢”的指标,即一个有较高中心性的结点比有较低中心性的结点能够

8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化

上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来探讨一下非递归方案 实验结果令人还是有些失望,原来非递归方案的性能并不比递归方案性能高 代码如下: package com.newflypig.eightqueen; import java.util.Date; /** * 使用循环控制来实现回溯,解决N皇后 * @author [email pr

二叉树的中序、先序、后序遍历非递归遍历算法(使用堆栈,用循环实现)

1 typedef struct TreeNode *BinTree; 2 typedef BinTree Position; 3 struct TreeNode{ 4 ElementType Data; 5 BinTree Left; 6 BinTree Right; 7 }; 8 BinTree BT; 9 void InOrderTraversal(BinTree BT)//中序遍历非递归遍历算法(使用堆栈,用循环实现) 10 { 11 BinTree T=BT; 12 Stack S=C

有向图的单源非负最短路径算法-dijkstra算法

dijkstra应用范围: 图中各边权值非负. 最短路径在现实中应用很广,比如在地图上找出最短路径等,这个算法很重要. 算法思想很简单,它不是找特定节点対之间的最短路径,它是找出源节点到所有其他节点的最短路径. 怎么找呢? 所需额外参数:path[] 记录路径. dist[] 记录路径长度, visited [] 标记已找到最短路径的节点. 第一步初始化, 将源节点visited标记为true, 并将其直连边长度,更新到dist[]数组. 其次要明白所有路径中最短的路径是哪一条? 肯定是源节点直