考虑以下两相锁定协议。假设事务 T 访问(用于读或写操作)一组特定的对象 {O1,…,Ok}。这是通过以下方式完成的:
第 1 步。 T 获得对 O1 的排他锁,。 . . , 确定按地址递增的顺序。
第 2 步。执行所需的操作。
第 3 步。所有的锁都被释放了。
该协议将
(A)保证可串行化和无死锁
(B)既不保证可串行化也不保证无死锁
(C)保证可序列化但不保证无死锁
(D)保证无死锁但不保证可序列化答案:(一)
说明:以上场景为Conservative 2PL(或Static 2PL)。在保守 2PL 协议中,事务必须在事务开始执行之前锁定它访问的所有项目。它用于避免死锁。此外,2PL 是冲突可序列化的,因此它保证了可序列化性。
因此选项A
保守 2PL 的优点:
- 没有死锁的可能。
- 确保可序列化。
保守党 2PL 的缺点:
- 吞吐量和资源利用率较低,因为它在事务开始执行之前持有资源。
- 饥饿是可能的,因为对解锁操作没有限制。
- 2pl 是一种无死锁协议,但在实践中很难使用。
这个问题的测验