现在我们已经熟悉了什么是两阶段 锁定(2-PL) 以及确保可序列化性应遵循的基本规则。此外,我们还遇到了2-PL、级联中止和死锁的问题。现在,我们转向2-PL上的增强,它试图使协议几乎无错误。简单地说,我们允许对2-PL进行一些修改以改进它。有三类:
- 严格2-PL
- 严格2-PL
- 保守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的时间表。现在,正如图所示,它也可以从逻辑上得出结论,如果时间表是严格的,那么它就是严格的。我们也可以用另一种方式思考,比如我们对一个时间表进行了限制,使其变得严格,在限制列表中添加另一个限制,使其变得严格。花点时间再次分析图表,你肯定会得到它。
图- 维恩图显示了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