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