设有如下两个事务,T1:读 Y,Z = Y*2 +1,写 Z;T2:读 Z,Y = Z + 2,写 Y;令 Y, Z 的初值分别为 2 和 3,试完成: 1、(4 分)若 T1 与 T2 允许并发执行,列出所有可能的正确结果; 2、(6 分)请给出一个可串行化的调度,并给出执行结果; 3、(6 分)若这两个事务都遵守两段锁协议,是否出现死锁?若能请给出一个产生死锁的调度;不能说明理由。
时间: 2024-02-23 17:56:01 浏览: 58
1、若 T1 与 T2 允许并发执行,可能的正确结果有以下两种:
- T1 先执行,T2 后执行:T1 读取 Y 的值为 2,计算得出 Z 的值为 5,写入 Z,T2 读取 Z 的值为 5,计算得出 Y 的值为 7,写入 Y。
- T2 先执行,T1 后执行:T2 读取 Z 的值为 3,计算得出 Y 的值为 5,写入 Y,T1 读取 Y 的值为 5,计算得出 Z 的值为 11,写入 Z。
2、一个可串行化的调度为 T1 → T2,执行结果为 Y 的值为 5,Z 的值为 11。
3、这两个事务都遵守两段锁协议不会出现死锁。在两段锁协议中,事务需要先获取所有需要的锁,再执行操作,最后释放所有锁。由于 T1 和 T2 都只需要获取 Y 和 Z 中的一个锁,因此不会出现死锁。如果 T1 和 T2 都需要获取 Y 和 Z 的锁,且获取锁的顺序不同,则可能出现死锁。比如,T1 先获取 Y 的锁,然后请求 Z 的锁,T2 先获取 Z 的锁,然后请求 Y 的锁,就会出现死锁。此时,系统需要终止其中一个事务,以解除死锁。
阅读全文