我正在阅读一些关于在分布式数据库中使用时间戳进行并发控制的优点/缺点。我正在阅读的材料提到,尽管时间戳克服了可能影响锁定的传统死锁问题,但仍然存在它容易受到的“全局死锁”问题。
该材料将全局死锁描述为局部图的等待图中不存在循环但全局图中存在循环的情况。
我想知道这怎么会发生?有人可以描述时间戳系统可能导致此问题的情况吗?
我正在阅读一些关于在分布式数据库中使用时间戳进行并发控制的优点/缺点。我正在阅读的材料提到,尽管时间戳克服了可能影响锁定的传统死锁问题,但仍然存在它容易受到的“全局死锁”问题。
该材料将全局死锁描述为局部图的等待图中不存在循环但全局图中存在循环的情况。
我想知道这怎么会发生?有人可以描述时间戳系统可能导致此问题的情况吗?
这是一个例子,可能是最简单的。我们有机器A
和B
. 机器A有锁T1
且T2
有关系T1 < T2
。机器B
有T3
和T4
有T3 > T4
。
现在,本地图只是 T2 必须等待 T1,T3 必须等待 T4。所以没有局部循环。但是现在,假设我们有T4 < T1
,所以 T1 必须等待 T4。同时T2 < T3
,T3 必须等待 T2。在这种情况下,全局存在一个循环。
那么这个循环是如何发生的呢?这里的关键是你永远不会在分布式系统中拥有完整的信息。所以我们稍后可能会知道机器间的依赖关系是存在的。然后我们有一个问题。
时间戳用于确定机器上本地进程之间的冲突解决方案。它提供了一种解决该级别死锁的方法。对于分布式进程,不同机器上的两个进程可能会相互等待。这实际上是一个常规死锁,但跨机器。这称为“全局”死锁。恕我直言,时间戳也可能在那里使用,但显然不切实际。
有关这方面的一些信息可以在http://www.cse.scu.edu/~jholliday/dd_9_16.htm上找到