如何理解两阶段封锁(Two-phase locking - 2PL)?

两阶段封锁(Two-phase locking - 2PL

首先,两阶段封锁强调的是“加锁(增长阶段,growing phase)和解锁(缩减阶段,shrinking phase)这两项操作,且每项操作各自为一个阶段”,这就是说不管同一个事务内需要在多少个数据项上加锁,那么所有的加锁操作都只能在同一个阶段完成,在这个阶段内,不允许对对已经加锁的数据项进行解锁操作,即加锁和解锁操作不能交叉执行(同一个事务内)这一条是说在同一个事务内部的事情

其次,为了提高并发度,才对锁进行分类,分出共享锁(读锁)和排它锁(写锁),因这两种类型的锁,又产生加两种锁共四种事务之间受影响的情况:

一是先对数据项加共享锁,则此读锁不阻塞其他事务也读取本数据项,这就是说读读并发是允许的,即第一种情况;但是此读锁阻塞其他事务写本数据项,这就是说读写并发是不允许的,即第二种情况;这里所说的读读和读写的第一个读在前,是因;第二个读或写是可能在其他事务发生的操作,是果,前者(第二个读操作)能够发生后者(写操作)不能够发生。

二是对数据项施加了排它锁,这使得其他事务在这个数据项上的读操作(第三种情况)或写操作(第四种情况)都被禁止。

这一条是说在多个事务之间的事情

多个事务之间比较锁是否兼容,用到了锁的兼容性列表,就是上面的四种情况。只是当锁的类型被扩展后,增加了意向锁等类型,才使得锁的兼容性列表变大,不再是四种情况,而是更多种。

第三,共享锁是允许向排它锁升级的,排它锁是允许向共享锁降级的,升级(upgrade)和降级(downgrade)操作,称为锁转换(lock conversion)。升级只能发生在增长阶段,降级只能发生在缩减阶段。升降级发生在同一个事务内部,但目的也是为了提高多个事务之间的并发度。同一个事物内部比较锁是否兼容,用到的是锁的升级列表,这与锁的兼容性列表是不同的。

所以,两阶段的含义是指在同一个事务内,对所涉及的所有数据项进行先加锁,然后才对所有的数据项解锁。但两阶段封锁第一阶段加共享锁后影响了其他事务的写操作、加排它锁后影响了其他事务的读操作(读受影响更不用提写),所以较大地影响了其他事务的运行(如果不操作相同数据项则互不影响)。只有第二阶段释放了所有的数据项上的锁之后,才能运行其他要操作相同数据项的事务。

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值