为了我自己的理智,我做了以下查找和替换
给下面的资源列表加上更简单的进程名称
<resource-list>
<keylock hobtid="72057616768958464" dbid="16" objectname="Orders"
indexname="PK_Orders" id="lock223c94b6980" mode="X"
associatedObjectId="72057616768958464">
<owner-list>
<owner id="process1" mode="X" />
</owner-list>
<waiter-list>
<waiter id="process2" mode="S" requestType="wait" />
</waiter-list>
</keylock>
<keylock hobtid="72057616768958464" dbid="16" objectname="Orders"
indexname="PK_Orders" id="lock223c94b6980" mode="X"
associatedObjectId="72057616768958464">
<owner-list>
<owner id="process2" mode="S" requestType="wait" />
</owner-list>
<waiter-list>
<waiter id="process3" mode="S" requestType="wait" />
</waiter-list>
</keylock>
<keylock hobtid="72057616768958464" dbid="16" objectname="Orders"
indexname="PK_Orders" id="lock2240f4bb680" mode="X"
associatedObjectId="72057616768958464">
<owner-list>
<owner id="process3" mode="X" />
</owner-list>
<waiter-list>
<waiter id="process1" mode="S" requestType="wait" />
</waiter-list>
</keylock>
</resource-list>
对于
lock223c94b6980
process1 有 X
锁,process2 正在等待 S
锁,process3 也在等待 S
锁,但显示为被 process2 阻止,而不是被根阻止者 process1 阻止,原因如下。
同时,
lock2240f4bb680
process3 持有 X
锁,而 process1 正在等待 S
锁。
循环等待实际上只涉及 process1 和 process3,因为它们都拥有一个键上的
X
锁,并且正在等待另一个键上的 S
锁。
原因如下
S
发出的process2
锁定请求与S
发出的process3
锁定请求兼容,但这只是维护锁定阻塞信息的方式。 如果某个服务员不是第一个处于 WAIT 状态的服务员,则始终认为它被第一个处于 WAIT 状态的服务员阻塞了