- 4
- 0
- 约5.08千字
- 约 42页
- 2019-05-30 发布于湖北
- 举报
二级封锁协议在读取数据之后,立即释放S锁,所以它仍然不能防止“重读”数据。 3.三级封锁协议 三级封锁协议的内容是:在一级封锁协议的基础上,另外加上事务T在读取数据R之前必须先对其加S锁,读完后并不释放S锁,而直到事务T结束才释放。 所以三级封锁协议除了可以防止更新丢失问题和“污读”数据外,还可进一步防止不可重读数据,彻底解决了并发操作所带来的三个不一致性问题。 X锁 S锁 一致性保证 操作结束释放 事务结束释放 操作结束释放 事务结束释放 不丢失修改 不读“脏”数据 可重复读 一级封锁协议 √ √ 二级封锁协议 √ √ √ √ 三级封锁协议 √ √ √ √ √ 表11.1 不同级别的封锁协议 11.4活锁和死锁 封锁技术可有效解决并行操作的一致性问题,但也可产生新的问题,即活锁和死锁问题。 1.活锁(Livelock) 当某个事务请求对某一数据的排它性封锁时,由于其他事务对该数据的操作而使这个事务处于永久等待状态,这种状态称为活锁。 例如,事务T1在对数据R封锁后,事务T2又请求封锁R,于是T2等待。T3也请求封锁R。当T1释放了R上的封锁后首先批准了T3的请求,T2继续等待。然后又有又T4请求封锁R,T3释放了R上的封锁后又批准了T4的请求……T2可能永远处于等待状态,从而发生了活锁。 避免活锁的简单方法是采用先来先服务的策略,按照请求封锁的次序对事务排队
原创力文档

文档评论(0)