并发控制之封锁协议

编程入门 行业动态 更新时间:2024-10-04 23:22:40

并发控制之封锁<a href=https://www.elefans.com/category/jswz/34/1771197.html style=协议"/>

并发控制之封锁协议

什么是封锁协议

在运用X锁和S锁对数据对象加锁时,需要约定一些规则,这些规则为封锁协议(Locking Protocol)。
何时申请X锁或S锁
持锁时间
何时释放
对封锁方式规定不同的规则,就形成了各种不同的封锁协议,它们分别在不同的程度上为并发操作的正确调度提供一定的保证。

三级封锁协议

1.一级封锁协议
2.二级封锁协议
3.三级封锁协议

一级封锁协议

一级封锁协议

事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。
正常结束(COMMIT)
非正常结束(ROLLBACK)
一级封锁协议可防止丢失修改,并保证事务T是可恢复的。
在一级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不读“脏”数据。

使用封锁机制解决丢失修改问题

没有丢失修改
事务T1在读A进行修改之前先对A加X锁
当T2再请求对A加X锁时被拒绝
T2只能等待T1释放A上的锁后获得对A的X锁
这时T2读到的A已经是T1更新过的值15
T2按此新的A值进行运算,并将结果值A=14写回到磁盘。避免了丢失T1的更新。

二级封锁协议

二级封锁协议

一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。
二级封锁协议可以防止丢失修改和读“脏”数据。
在二级封锁协议中,由于读完数据后即可释放S锁,所以它不能保证可重复读。

使用封锁机制解决读“脏”数据问题

不读“脏”数据
事务T1在对C进行修改之前,先对C加X锁,修改其值后写回磁盘
T2请求在C上加S锁,因T1已在C上加了X锁,T2只能等待
T1因某种原因被撤销,C恢复为原值100
T1释放C上的X锁后T2获得C上的S锁,读C=100。避免了T2读“脏”数据

三级封锁协议

三级封锁协议

一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。
三级封锁协议可防止丢失修改、读脏数据和不可重复读。

使用封锁机制解决不可重复读问题

可重复读
事务T1在读A,B之前,先对A,B加S锁
其他事务只能再对A,B加S锁,而不能加X锁,即其他事务只能读A,B,而不能修改
当T2为修改B而申请对B的X锁时被拒绝只能等待T1释放B上的锁
T1为验算再读A,B,这时读出的B仍是100,求和结果仍为150,即可重复读
T1结束才释放A,B上的S锁。T2才获得对B的X锁

封锁协议小结

三级协议的主要区别

什么操作需要申请封锁以及何时释放锁(即持锁时间)

不同的封锁协议使事务达到的一致性级别不同

封锁协议级别越高,一致性程度越高

欢迎大家加我微信交流讨论(请备注csdn上添加)

更多推荐

并发控制之封锁协议

本文发布于:2024-02-28 13:32:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1769746.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:协议

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!