等待死亡和创伤等待算法之间有什么区别?
这两种死锁预防技术似乎都在做同样的事情:回滚旧进程.
两者之间有什么区别?
请提供一个合适的例子来对比这两种算法.
等待死亡和创伤等待算法之间有什么区别?
这两种死锁预防技术似乎都在做同样的事情:回滚旧进程.
两者之间有什么区别?
请提供一个合适的例子来对比这两种算法.
这是一种防止死锁的non-preemptive技术. 当事务Tn请求Tk当前持有的数据项时, 仅当Tn的时间戳小于Tk的时间戳时,才允许Tn等待 (即Tn是older比Tk),否则Tn被杀死("die").
在该方案中,如果事务请求锁定资源(数据项), 它已经由另一个事务使用冲突锁持有,则可能出现以下两种可能性之一:
Timestamp(Tn) < Timestamp(Tk) −
Timestamp(Tn) > Timestamp(Tk)−
该方案允许较老的事务"等待",但会杀死较年轻的事务("死亡").
假设事务T5、T10、T15分别具有时间戳5、10和15.
如果T 5请求由T 10持有的数据项,则T 5将"等待".
如果T15请求由T10保存的数据项,则T15将被终止("die").
这是一种防止死锁的技术.
在该方案中,如果事务请求锁定资源(数据项), 它已经被另一个事务用冲突的锁持有,则可能会出现以下两种可能性之一:
Timestamp(Tn) < Timestamp(Tk), 然后,Tn迫使Tk被杀死,即Tn"−"Tk. Tk is restarted later with a random delay but with the same timestamp(k).
Timestamp(Tn) > Timestamp(Tk),
该方案允许请求锁定的较年轻事务在较老事务已持有锁的情况下"等待",但如果较老事务请求锁定较年轻事务已持有的项目,则强制较年轻事务暂停("关闭").
再次假设事务T5、T10、T15分别具有时间戳5、10和15.
如果T 5请求由T 10持有数据项, 那么数据项将从T10被抢占,并且T10将被暂停.("伤员")
如果T15请求由T10持有的数据项,则T15将"等待".
在这两种情况下,只有以later时间戳进入系统的事务(即较年轻的事务)可能被终止并重新启动.