考虑以下两个事务:T 1和T 2 。
以下哪种方案,使用共享锁和排他锁,满足上述事务的严格两阶段锁定要求?
(一) A
(乙)乙
(C)丙
(四)丁答案: (C)
解释:
共享锁用于读,排他锁用于写数据。一个排他锁不能占用其他调度已经占用的另一个排他锁,因为这会导致死锁。遵循严格 2PL 的要求:
1. 排他锁应该在提交后释放(提交后释放排他锁限制死锁条件。即我们不能在项目上获得锁,因为排他锁已经被占用。
2.第一次解锁后不能加锁,反之亦然。
选项(A):不正确,因为写 B,S1 需要对 B 的排他锁,而写 A,S2 需要对 A 的排他锁。这就是为什么它是不正确的。
选项(B):不正确,因为一个排他锁不能占用另一个排他锁。在这里,S1 对项目 A 采取了排他锁,S2 对项目 B 采取了排他锁,所以现在 S1 不能对项目 B 采取排他锁,S2 不能对项目 A 采取排他锁。这就是为什么它是不正确的。
选项 (C):正确,因为它遵循了严格 2PL 的所有三个要求。这里,schedule S1 在 commit 后释放对 B 的独占锁,schedule S2 在 commit 后释放对 A 的独占锁。(满足条件 1)
选项(D):根据条件1不正确,提交后应释放排他锁。这里,调度 S1 在提交前释放 B 上的排他锁,调度 S2 在提交前释放 A 上的排他锁。因此它是不正确的。
该解决方案由Nitika Bansal 提供。
这个问题的测验