database - 为什么树协议(protocol)没有死锁?

标签 database tree locking protocols rdbms

我一直在阅读有关树协议(protocol)作为数据库中锁定管理的方法的文章。我读到它没有死锁,但我不确定它是如何工作的。
示例:
enter image description here

假设T1已经以独占方式锁定了B、D、E。
根据规则:
enter image description here

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/

相关文章:

SQL Server 2008 R2 卡在单用户模式

mysql - 如何插入/更新可能基于不同记录的存在而存在的关系记录

python - wxPython TreeCtrl 不显示根但仍显示箭头

java - 哈夫曼树算法难以理解

c# - 锁定内部字符串?

.net - 如何以编程方式复制在 Windows 下锁定的文件或文件夹?

database - 存储库内的异常 : how do you handle them?

go - 为什么 p 不满足 c 的接口(interface)(第 106 行)?

c - 为什么linux内核中rwlock比seqlock更流行?

java - 具有集合的 Hibernate 或 SQL 查询 M-N 成员?