【问题标题】:Two-Phase-Locking (2PL) Transactions两阶段锁定 (2PL) 交易
【发布时间】:2016-12-30 17:50:19
【问题描述】:

我目前正在处理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。我在这里做错了什么?

【问题讨论】:

    标签: database transactions


    【解决方案1】:

    我终于找到了我错的原因。一个事务最多可以为每个对象执行 1 个Lock/Unlock 是正确的。但是我忘记了在事务执行其第一个Unlock(对哪个对象无关)之后,根本不允许再次执行Lock,即使在另一个之前没有被锁定的对象上也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      • 1970-01-01
      • 2011-11-24
      • 2013-05-21
      • 2021-10-08
      • 1970-01-01
      相关资源
      最近更新 更多