并发控制三(封锁协议)

封锁协议是解决并发操作中可能出现的问题,如丢失修改、不可重复读和读“脏”数据的关键。一级封锁协议防止丢失修改,但不保证可重复读和读“脏”数据;二级封锁协议增加了读取数据前加S锁,防止读“脏”数据但无法避免不可重复读;三级封锁协议在读取数据前加S锁直至事务结束,从而防止所有不一致性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在运用排他锁和共享锁这两种基本封锁对数据对象加锁时,还需要约定一些规则。如:何时申请X锁或S锁、持锁时间、何时释放等,这些规则被称为封锁协议。对封锁方式指定不同的规则,就形成了各种不同的封锁协议。常用的是三级封锁协议,三级封锁协议在不同程度上解决了并发操作的不正确调度带来的丢失修改、不可重复读和读“脏”数据等不一致性问题。

(1)一级封锁协议

事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(commit)和非正常结束(rollback)。

一级封锁协议可防止丢失修改,并保证事务T是可恢复的。

一级封锁协议中,如果仅仅是读数据而不对其进行修改,是不需要加锁的,所以它不能保证不可重复读和读“脏”数据。

(2)二级封锁协议

在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。

二级封锁协议除防止丢失修改,还可进一步防止读“脏”数据。

二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。

(3)三级封锁协议

在以及封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。

三级封锁协议除了防止丢失修改和读“脏”数据外,还进一步防止了不可重复读。

上述三级封锁协议的主要区别在于什么操作需要申请封锁,以及何时释放锁。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值