本文主要是介绍两段锁协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
两段锁协议: 是指所有的事务必须分两个阶段对数据项加锁和解锁。即事务分两个阶段
,第一个阶段是获得封锁
。事务可以获得任何数据项上的任何类型的锁,但是不能释放;第二阶段是释放封锁
,事务可以释放任何数据项上的任何类型的锁,但不能申请。
第一阶段是获得封锁的阶段,称为扩展阶段
:其实也就是该阶段可以进入加锁操作,在对任何数据进行读操作之前要申请获得S锁
,在进行写操作之前要申请并获得X锁
,加锁不成功,则事务进入等待状态
,直到加锁成功才继续执行。就是加锁后就不能解锁
了。
第二阶段是释放封锁的阶段,称为收缩阶段
:当事务释放一个封锁后,事务进入封锁阶段,在该阶段只能进行解锁而不能再进行加锁操作
。
这里举个例子说明:
事务遵守两段锁协议,其封锁序列是:
显然,上图中D事务不遵守两段锁协议。整个加锁阶段不能有解锁,解锁阶段不能有加锁
可以证明,若并发执行的所有事务均遵守两段锁协议
,则对这些事务的任何并发调度策略都是可串行化
的。
这篇关于两段锁协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!