「分布式技术专题」并发系列一:基于加锁的并发控制

并发控制分类

数据库中如果出现了冲突,一般有几种情况。两个操作同时访问了相同的数据库条目, 并且他们中的任意一个是写操作,那么它们就是冲突的。

众所周知,读操作是不会相互冲突的,冲突的类型只有两种:读-写(或写-读)和写-写冲突, 并且无论这两个操作是属于相同的事务还是属于不同的事务。

直观上,两个操作相冲突表明它们之间的执行顺序很重要,而两个读操作的顺序不重要。

从可串行化的角度来看的话,我们只需要处理事务中相互冲突的操作,而不是所有的操作。

为了实现并发,需要加入并发控制来避免冲突,一般的分类方式是基于同步原语的,可以依据它将并发控制分为两类:基于对共享数据进行互斥访问的(基于锁),以及基于将事务的执行根据一系列规则进行排序的(基于协议)。

另一个视角来看,就是悲观视角和乐观视角,悲观视角假设很多事务都会相互冲突, 而乐观视角则假设并没有太多的事务会相互冲突。

悲观视角会在并发事务执行周期的早期对它们进行同步;而乐观视角则会将这种同步推迟到事务提交之后。并发控制机制的总体分类如图所示:
在这里插入图片描述

concurrent1
在本文中主要讨论基于加锁的并发控制。

基于加锁的并发控制的基本思想是:如果多个冲突的操作会访问同一个数据项, 那么就保证这个数据项一次只被其中的一个访问。这可以由为每个锁单位分配一个锁来实现。 一个锁会在开始访问事务的时候被设置,然后在使用过后重置。 显然,如果一个锁单位已经被一个操作锁住,那么其他操作就不能访问它了。 因此,当且仅当锁未被别的事务占用的时候,一个事务才能申领到锁。

由于要做的事是同步冲突事务中的冲突操作,因此将分配给每个锁单位的锁分为两种类型(锁模式): 读锁(read lock)和写锁(write lock)。如果两个事务可以同时申请到锁,说明两个锁是相容的。 就如前边提到的一样,所有的读锁都相容,读-写和写-写锁不相容。因此, 两个事务可以并发的读取同一数据项。

锁定义

分布式数据库会承担事务的锁管理的任务。在基于加锁的系统中,调度程序是一个锁管理程序。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值