"wait-die" 和 "wound-wait" 死锁预防算法有什么区别?
What is the difference between "wait-die" and "wound-wait" deadlock prevention algorithms?
wait-die和wound-wait算法有什么区别?
这两种死锁预防技术似乎都在做同样的事情:回滚旧进程。
两者有什么区别?
请提供一个合适的例子来对比这两种算法。
Wait-Die 方案
它是一种 非抢占式 预防死锁的技术。
当事务Tn请求Tk当前持有的一个数据项时,
只有当 Tn 的时间戳小于 Tk 时才允许等待
(即Tn比Tk旧),否则Tn 被杀(“死”)。
在这个方案中,如果一个事务请求锁定一个资源(数据项),
它已经被另一个事务持有冲突锁,那么可能会出现以下两种可能性之一:
时间戳(Tn) < 时间戳(Tk ) -
即请求冲突锁的 Tn 比 Tk old −
然后 Tn 被允许“等待”直到数据项可用。
时间戳(Tn) > 时间戳(Tk) -
也就是说 Tn 比 Tk 年轻 −
然后 Tn 被杀死(“死亡”)。
Tn 稍后以随机延迟重新启动,但具有相同的时间戳 (n)。
此方案允许较旧的事务“等待”但杀死较新的事务(“死亡”)。
例子
假设交易 T5, T10, T15 有时间戳分别为 5、10 和 15。
如果T5请求T10持有的数据项,那么T5将“等待”。
如果T15请求T10持有的数据项,则T15将被杀死(“死”)。
伤口等待方案
这是一种先发制人技术,用于防止死锁。
它与等待死亡方案相对应。
当事务Tn请求Tk当前持有的一个数据项时,
只有Tn的时间戳大于Tk才允许等待,
否则 Tk 被杀死
(即Tk被Tn打伤)
在这个方案中,如果一个事务请求锁定一个资源(数据项),
它已经被另一个事务持有冲突锁,可能会出现以下两种可能性之一:
时间戳(Tn) < 时间戳(Tk),
然后 Tn 强制 Tk 被杀死 - 即 Tn “伤口” Tk。
Tk 稍后以随机延迟重新启动,但具有相同的时间戳 (k)。
时间戳(Tn) > 时间戳(Tk),
然后 Tn 被迫“等待”直到资源可用。
如果旧事务已经持有锁,此方案允许请求锁的新事务“等待”,但如果旧事务请求对项目的锁定,则强制暂停(“伤口”)新事务已经被小的抱走了。
例子
同样,假设事务T5、T10、T15有时间-分别标记 5、10 和 15。
如果T5请求一个T10持有的数据项,
然后数据项将从 T10 被抢占,T10 将被挂起。 (“受伤”)
如果T15请求T10持有的数据项,则T15将“等待”。
总结
在这两种情况下,只有在 之后 时间戳进入系统的事务(即较年轻的事务)可能会被终止并重新启动。
Parth给出了详细的解答。这里我换个方式总结一下。
假设Tn请求Tk持有的锁。下面table总结了wait-die和wound-wait方案所采取的行动:
wait-die wound-wait
Tn is younger than Tk Tn dies Tn waits
Tn is older than Tk Tn waits Tk aborts
这两种方案都更喜欢具有较旧时间戳的较旧事务。
在这两种情况下,Old 总是冠军,即会存活下来。不同之处在于年轻交易的角度。
如果年轻的人正在请求年长的跨性别者持有的资源。 , 在 wait/die 他可以等待给予尊重,因为老 trans.If 年轻的人正在请求旧翻译持有的资源。, 在 wound/die 他将被迫回滚作为旧翻译。
在这两种方案中,旧的永远不会丢失。
wait-die:当 older 事务试图锁定已被 锁定的 DB 元素时小 交易,它等待。当 younger 事务试图锁定已被 older 事务锁定的数据库元素时,它 dies.
wound-wait:当 older 事务尝试锁定已被 锁定的 DB 元素时年轻交易,它伤害年轻交易。当 younger 事务试图锁定已被 older 事务锁定的数据库元素时,它 waits.
参考文献:
@JingguoYao 的总结我会稍微改变一下。
我只是重新安排了它,因为对我(以及像我这样的其他人)来说,这样读起来更容易。
假设Tn请求Tk持有的锁。下面table总结了wait-die和wound-wait方案所采取的行动:
Tn is older than Tk Tn is younger than Tk
wait-die Tn waits Tn dies
wound-wait Tk aborts Tn waits
这两种方案都更喜欢具有较旧时间戳的较旧事务。
理解两个相关主题的最佳方式可以通过比较来实现。所以,
wait-die 和 wound-wait 相似度:
- 较旧的事务将 "win" 覆盖较新的事务。
- 事务重新启动时,它们会保留时间戳。
- 最终,中止的(较新的)事务将成为系统中最旧的事务。
wait-die和wound wait的区别:
- 在 wait-die 中,当较新的事务请求较旧的事务持有的锁时,较新的事务被杀死。
- 在 wound-wait 中,当旧事务请求新事务持有的锁时,新事务被终止。
- 当两条边都形成时,就会产生死锁,如图所示
多于。新事务向旧事务请求锁定,并且
旧事务向新事务请求锁定。
- 这两种技术中的每一种都只是防止其中一条边被
在允许另一个边缘的同时形成,因此先发制人地防止
从形成循环开始。
- 如果你注意到,在这两种策略中,年轻的交易都得到
中止。只有锁请求的发起者不同。中止
事务在稍后的时间点重新启动。
wait-die和wound-wait算法有什么区别?
这两种死锁预防技术似乎都在做同样的事情:回滚旧进程。
两者有什么区别?
请提供一个合适的例子来对比这两种算法。
Wait-Die 方案
它是一种 非抢占式 预防死锁的技术。 当事务Tn请求Tk当前持有的一个数据项时, 只有当 Tn 的时间戳小于 Tk 时才允许等待 (即Tn比Tk旧),否则Tn 被杀(“死”)。
在这个方案中,如果一个事务请求锁定一个资源(数据项), 它已经被另一个事务持有冲突锁,那么可能会出现以下两种可能性之一:
时间戳(Tn) < 时间戳(Tk ) - 即请求冲突锁的 Tn 比 Tk old − 然后 Tn 被允许“等待”直到数据项可用。
时间戳(Tn) > 时间戳(Tk) - 也就是说 Tn 比 Tk 年轻 − 然后 Tn 被杀死(“死亡”)。 Tn 稍后以随机延迟重新启动,但具有相同的时间戳 (n)。
此方案允许较旧的事务“等待”但杀死较新的事务(“死亡”)。
例子
假设交易 T5, T10, T15 有时间戳分别为 5、10 和 15。
如果T5请求T10持有的数据项,那么T5将“等待”。
如果T15请求T10持有的数据项,则T15将被杀死(“死”)。
伤口等待方案
这是一种先发制人技术,用于防止死锁。 它与等待死亡方案相对应。 当事务Tn请求Tk当前持有的一个数据项时, 只有Tn的时间戳大于Tk才允许等待, 否则 Tk 被杀死 (即Tk被Tn打伤)
在这个方案中,如果一个事务请求锁定一个资源(数据项), 它已经被另一个事务持有冲突锁,可能会出现以下两种可能性之一:
时间戳(Tn) < 时间戳(Tk), 然后 Tn 强制 Tk 被杀死 - 即 Tn “伤口” Tk。 Tk 稍后以随机延迟重新启动,但具有相同的时间戳 (k)。
时间戳(Tn) > 时间戳(Tk), 然后 Tn 被迫“等待”直到资源可用。
如果旧事务已经持有锁,此方案允许请求锁的新事务“等待”,但如果旧事务请求对项目的锁定,则强制暂停(“伤口”)新事务已经被小的抱走了。
例子
同样,假设事务T5、T10、T15有时间-分别标记 5、10 和 15。
如果T5请求一个T10持有的数据项, 然后数据项将从 T10 被抢占,T10 将被挂起。 (“受伤”)
如果T15请求T10持有的数据项,则T15将“等待”。
总结
在这两种情况下,只有在 之后 时间戳进入系统的事务(即较年轻的事务)可能会被终止并重新启动。
Parth给出了详细的解答。这里我换个方式总结一下。
假设Tn请求Tk持有的锁。下面table总结了wait-die和wound-wait方案所采取的行动:
wait-die wound-wait
Tn is younger than Tk Tn dies Tn waits
Tn is older than Tk Tn waits Tk aborts
这两种方案都更喜欢具有较旧时间戳的较旧事务。
在这两种情况下,Old 总是冠军,即会存活下来。不同之处在于年轻交易的角度。
如果年轻的人正在请求年长的跨性别者持有的资源。 , 在 wait/die 他可以等待给予尊重,因为老 trans.If 年轻的人正在请求旧翻译持有的资源。, 在 wound/die 他将被迫回滚作为旧翻译。
在这两种方案中,旧的永远不会丢失。
wait-die:当 older 事务试图锁定已被 锁定的 DB 元素时小 交易,它等待。当 younger 事务试图锁定已被 older 事务锁定的数据库元素时,它 dies.
wound-wait:当 older 事务尝试锁定已被 锁定的 DB 元素时年轻交易,它伤害年轻交易。当 younger 事务试图锁定已被 older 事务锁定的数据库元素时,它 waits.
参考文献:
@JingguoYao 的总结我会稍微改变一下。 我只是重新安排了它,因为对我(以及像我这样的其他人)来说,这样读起来更容易。
假设Tn请求Tk持有的锁。下面table总结了wait-die和wound-wait方案所采取的行动:
Tn is older than Tk Tn is younger than Tk
wait-die Tn waits Tn dies
wound-wait Tk aborts Tn waits
这两种方案都更喜欢具有较旧时间戳的较旧事务。
理解两个相关主题的最佳方式可以通过比较来实现。所以, wait-die 和 wound-wait 相似度:
- 较旧的事务将 "win" 覆盖较新的事务。
- 事务重新启动时,它们会保留时间戳。
- 最终,中止的(较新的)事务将成为系统中最旧的事务。
wait-die和wound wait的区别:
- 在 wait-die 中,当较新的事务请求较旧的事务持有的锁时,较新的事务被杀死。
- 在 wound-wait 中,当旧事务请求新事务持有的锁时,新事务被终止。
- 当两条边都形成时,就会产生死锁,如图所示 多于。新事务向旧事务请求锁定,并且 旧事务向新事务请求锁定。
- 这两种技术中的每一种都只是防止其中一条边被 在允许另一个边缘的同时形成,因此先发制人地防止 从形成循环开始。
- 如果你注意到,在这两种策略中,年轻的交易都得到 中止。只有锁请求的发起者不同。中止 事务在稍后的时间点重新启动。