考虑到以下时间表S,我目前正在处理2-Phase-Lock Protocol:
S = R_3 D R_1 A W_2 A W_2 C R_3 B W_3 B R_1 B
其中R =读,W =写,{A,B,C} =对象和{1,2,3} =事务。
现在我将证明2PL
无法用于S
。但我实际上不明白为什么,我会将Locks(L)/Unlocks(U)
设置为:
L_3 D R_3 D U_3 D L_1 A R_1 A U_1 A L_2 C W_2 C U_2 C L_3 B R_3 B W_3 B U_3 B R_1 B
所以,我在每个交易对象最多使用1 L/U
。我在这里做错了什么?
答案 0 :(得分:0)
我终于找到了为什么我错了。事务可以在每个对象最多1 Lock/Unlock
处执行是正确的。但我忘记了在事务执行完第一个Unlock
后(对哪个对象无关),根本不允许再次执行Lock
,即使是另一个尚未锁定的对象之前。