【问题标题】:Lost-Update and Two-Phase Locking (How dead-lock occurs?)丢失更新和两阶段锁定(死锁是如何发生的?)
【发布时间】:2021-09-27 15:15:11
【问题描述】:

您能否检查一下我的回答是否适合这些问题?问题 1 是关于丢失更新,问题 2 是关于 2PL(死锁是如何发生的?)

问题标题

问题 1

我对 (Q1) 的回答

丢失更新问题

原因:

A 的预期最终值为 280,而 B 为 240。但由于丢失更新问题,这两个各自的值无法实现。

对于事务 T1,值 A 在时间 t1 被读取,即 160,值 B 在时间 t2 被读取,即 60。在时间 t2 期间,事务 T2 开始,并且也在读取值 B这被称为脏读。在时间 t4 之后,在事务 1 中计算了值 B,在时间 t6,值 B 已部分提交,即 120,同时在事务 T2 时间 t5 中,值 B 也已计算,现在保持 120 并且正在部分承诺以及。最后,120 的值 B 已在 t7 时间在事务 1 中提交,随后是 120 的值 B,在 t11 时间在事务 2 中提交。这是发生丢失更新问题的时候,事务 1 上的值 B 被事务 T2 上的值 B 覆盖。

版本控制方法 --> 仍然不确定这会在我完成学业后在这里更新我的答案!对此深表歉意!

问题 2

我对 (Q2) 的回答 2PL 中如何发生死锁

【问题讨论】:

    标签: database oracle transactions deadlock acid


    【解决方案1】:

    我的解释

    在事务 T1 中有两个锁被请求。在时间 t2 期间,值 A 上使用了读锁,因为值 A 需要只读,而值 B 上使用写锁,因为修改或写入数据需要值 B。同时,事务 T2 开始并且正在请求写锁,并注意到 T1 尚未解锁值 B,这是当事务 T2 中的写锁未被授予时,因为值 B 仍在事务 T1 中的写锁,而这被称为互斥情况,其中事务 T2 中的操作将等待事务 T1 操作完成,然后值 B 将被解锁,因为只有事务 T2 正在等待事务 T1 而事务 T1 不是等待事务 T2 然后不会发生死锁,事务 T2 将只是简单地等待事务 T1 完成事务,无论事务 T1 持续多长时间。正如我们在时间 t12 看到的那样,一旦值 A 和值 B 被提交,值 B 上的写锁就会被授予,这意味着值 B 上的排他锁是可用的,因为已经在事务 1 上完成了解锁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 2017-03-31
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      相关资源
      最近更新 更多