首页 > 试题广场 >

遵守两段锁协议的事务一定不会死锁。( )

[单选题]
遵守两段锁协议的事务一定不会死锁。(        )
  • 正确
  • 错误
两段锁协议并不要求事务必须一次将所有要使用的数据全部加锁,因此遵守两段锁协议的事务可能发生死锁。
发表于 2017-11-17 10:01:56 回复(0)
更多回答
两段锁协议(Two-Phase Locking――2PL)
两段锁协议规定所有的事务应遵守的规则:
① 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。
② 在释放一个封锁之后,事务不再申请和获得其它任何封锁。
即事务的执行分为两个阶段:
第一阶段是获得封锁的阶段,称为扩展阶段。
第二阶段是释放封锁的阶段,称为收缩阶段。

定理:若所有事务均遵守两段锁协议,则这些事务的所有交叉调度都是可串行化的。
对于遵守两段协议的事务,其交叉并发操作的执行结果一定是正确的。值得注意的是,上述定理是充分条件,不是必要条件。一个可串行化的并发调度的所有事务并不一定都符合两段锁协议,存在不全是2PL的事务的可串行化的并发调度。
同时我们必须指出,遵循两段锁协议的事务有可能发生死锁。

此时事务T1 、T2同时处于扩展阶段,两个事务都坚持请求加锁对方已经占有的数据,导致死锁。
为此,又有了一次封锁法。一次封锁法要求事务必须一次性将所有要使用的数据全部加锁,否则就不能继续执行。因此,一次封锁法遵守两段锁协议,但两段锁并不要求事务必须一次性将所有要使用的数据全部加锁,这一点与一次性封锁不同,这就是遵守两段锁协议仍可能发生死锁的原因所在。

发表于 2017-08-06 15:06:00 回复(2)
一般题目带  一定  肯定等绝对性的语气词,一般都是错的
发表于 2022-07-01 14:01:46 回复(1)
遵循两段锁协议的事务可能会发生死锁,主 要是因为在锁定资源时存在时间窗口,事务 无法同时获得所有需要的锁。这导致多个事 务之间可能形成循环等待的局面,互相等待 对方释放持有的资源,从而造成死锁。
编辑于 2024-03-22 12:19:11 回复(0)
事务的两段锁协议是保证可串行化调度的充分条件。
发表于 2021-03-09 21:39:49 回复(0)