我一直在阅读有关树协议(protocol)作为数据库中锁定管理的方法的文章。我读到它没有死锁,但我不确定它是如何工作的。
示例:
假设T1已经以独占方式锁定了B、D、E。
根据规则:
T2 可以锁定 H(规则 2 允许)。
现在如果 T1 想要锁定 H 它不能,尽管它已经锁定了父 D 因为 T2 有锁所以它等待。
如果 T2 现在想锁定 G,它必须锁定 D,但 D 已被 T1 锁定,因此它必须等待。因此陷入僵局。
我对算法有什么误解?
最佳答案
在您的示例中,树协议(protocol)的规则 2 甚至不允许 T2 请求锁定 G,因此不会出现死锁。
T2 锁定的第一个项目是 H。根据规则 2,T2 只能为 H(示例中的 J)的后代请求锁定。
如果 T2 需要同时锁定 H 和 G,那么第一个锁定请求必须针对其父 D(或 H 和 G 的任何祖先)。
关于database - 为什么树协议(protocol)没有死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22311391/