为什么树协议死锁是免费的?

时间:2014-03-10 21:11:19

标签: database tree locking protocols rdbms

我一直在阅读树协议作为锁定数据库管理的方法。我读到它是无死锁的,但我不确定它是如何工作的。
例如:
enter image description here

假设T1在独占模式下锁定了B,D,E 根据规则:
enter image description here

T2可以锁定H(规则2允许) 现在,如果T1想要锁定H,尽管它已经锁定了父D,因为T2已经锁定所以它等待。 如果T2现在要锁定G它必须锁定D但D被T1锁定,所以它必须等待。因此陷入僵局 我在算法中误解了什么?

4 个答案:

答案 0 :(得分:1)

在您的示例中,树协议的规则2不允许T2甚至在G上请求锁定,因此不会出现死锁。

T2锁定的第一个项目是H.根据规则2,T2只能为H的后代请求锁定(示例中为J)。

如果T2需要锁定H和G,则第一个锁定请求必须位于其父D(或H和G的任何祖先)上。

答案 1 :(得分:0)

T2无法锁定D,因为当时T2没有锁定其父级。

答案 2 :(得分:0)

我能想到的解释是:

因为锁可以随时释放,因此假设T2在独占模式下访问H后,释放它,因此T1可以访问它 然后假设T1释放所有锁定和提交,之后T2可以获得对A,B,D的锁定然后G

因为它不是2阶段锁定因此可以随时释放锁。

如果您有任何其他解释,请分享相同的内容。

答案 3 :(得分:0)

我想你的问题直到现在才解决,但我只为其他人回答。

在你的场景中存在一个问题,就是T2锁定了H的第一个锁定位置(根据算法它是真的你可以从任何位置开始),但T2永远不能爬到root并且锁定其他节点,所以如果T2从H开始从不允许需要G.例如,如果T2需要G和H,那么应该从包含两者的节点开始。

让我知道我的回答是对还是错......