两阶段锁定(2PL)交易

时间:2016-02-09 14:37:51

标签: database transactions

考虑到以下时间表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。我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

我终于找到了为什么我错了。事务可以在每个对象最多1 Lock/Unlock处执行是正确的。但我忘记了在事务执行完第一个Unlock后(对哪个对象无关),根本不允许再次执行Lock,即使是另一个尚未锁定的对象之前。