两相锁定的类别(严格、严格和保守)

现在我们已经熟悉了什么是两阶段 锁定(2-PL) 以及确保可序列化性应遵循的基本规则。此外,我们还遇到了2-PL、级联中止和死锁的问题。现在,我们转向2-PL上的增强,它试图使协议几乎无错误。简单地说,我们允许对2-PL进行一些修改以改进它。有三类:

null
  1. 严格2-PL
  2. 严格2-PL
  3. 保守2-PL

现在回想一下基本2-PL中遵循的规则,在此基础上我们做了一些额外的修改。现在让我们看看这些修改是什么,它们解决了哪些缺点。

严格的2-PL——

除此之外,还需要2相锁 所有专用(X)锁 该交易所持有的股份将被解除,直至 之后 事务提交。 遵循严格的2-PL可确保我们的日程安排:

  • 可恢复的
  • 无级联

因此,它使我们免于基本2-PL中仍然存在的级联中止,并且保证严格的时间表,但, 僵局是可能的 !

严格的2-PL——

除此之外,还需要2相锁 所有独占(X)和共享(S)锁 该交易所持有的股份将被解除,直至 之后 事务提交。 遵循严格的2-PL确保我们的日程安排:

  • 可恢复的
  • 无级联

因此,它使我们免于基本2-PL中仍然存在的级联中止,并且保证严格的时间表,但, 僵局是可能的 !

请注意,Strict 2-PL和Strict 2-PL之间的区别在于Strict更具限制性,它要求在事务提交之前保留独占锁和共享锁,这使得Strict 2-PL的实现更容易。

保守的2-PL-

又名 静态2-PL ,该协议要求事务在开始执行之前,通过预删除其读集和写集来锁定其访问的所有项。如果无法锁定所需的任何预声明项,则事务不会锁定任何项,而是等待所有项都可用于锁定。

保守的2-PL是 无死锁 但它并不能确保严格的时间表(更多关于这一点) 在这里 !). 然而,它很难在实践中使用,因为需要预先分离读集和写集,这在许多情况下是不可能的。实际上,最流行的2-PL变体是严格的2-PL。

下面的维恩图显示了严格的时间表分类。宇宙代表可以序列化为2-PL的时间表。现在,正如图所示,它也可以从逻辑上得出结论,如果时间表是严格的,那么它就是严格的。我们也可以用另一种方式思考,比如我们对一个时间表进行了限制,使其变得严格,在限制列表中添加另一个限制,使其变得严格。花点时间再次分析图表,你肯定会得到它。

33

图- 维恩图显示了2-PL下的语言类别

现在,让我们看看下面的时间表,告诉我这个时间表是否可以用2-PL锁定,如果可以,说明你的答案属于什么类别的2-PL?

T 1. T 2.
1. 读(一)
2. 读(一)
3. 读(B)
4. 写(B)
5. 犯罪
6. 读(B)
7. 写(B)
6. 犯罪

我建议你在考虑解决方案之前先尝试一下。 是的,时间表是可冲突序列化的,所以我们可以尝试实现2-PL。所以,让我们试试…

解决方案:

T 1. T 2.
1. 锁-S(A)
2 读(一)
3. 锁-S(A)
4. 读(一)
5 锁X(B)
6. 读(B)
7. 写(B)
8. 犯罪
9 解锁(A)
10 解锁(B)
11 锁X(B)
12 读(B)
13 写(B)
14 犯罪
15 解锁(A)
16 解锁(B)

现在,这是我选择在A和B上实现锁的一种方法。您可以尝试不同的序列,但请记住遵循2-PL协议。话虽如此,请注意我们的锁在提交操作后被释放,因此这符合严格的2-PL协议。

现在,我想你一定已经知道如何区分2-PL的类型了。记住这个理论,因为考试中出现的问题有时只是基于理论知识。接下来,我们将看一些保守的2-PL的例子,以及它与上述两种类型的2-PL有什么不同。是什么使它没有死锁,也很难实现。然后,我们将结束2-PL的主题。很快,我们将继续讨论另一种基于锁的协议——基于图的协议。它们也非常有趣,提供了一种处理死锁问题的独特方法!因此,我们将学习一种新型的锁协议,这将结束基于锁的门协议主题,直到快乐学习。

与登机门有关的问题: CS门| IT 2004 |问题77

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享