并发控制概述

来源:互联网 发布:tumblr mac客户端 编辑:程序博客网 时间:2024/04/20 02:15

    封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。
    确切的控制由封锁的类型决定。基本的封锁类型有两种:排它锁(Eclusive Locks,简称X锁)和共享锁(Share Locks,简称S锁)。
    排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。
    共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
    如果事务T1封锁了数据R,事务T2又请求封锁R,于是T2等待。T3也请求封锁R,当T1释放了R上的封锁之后系统首先批准了T3的请求,T2仍然等待。然后T4又请求封锁R,当T3释放了R上的封锁之后系统又批准了T4的请求.......T2有可能永远等待,这就是活锁。
    如果事务T1封锁了数据R1,T2封锁了数据R2,然后T1又请求封锁R2,因T2已封锁了R2,于是T1等待T2释放R2上的锁。接着T2又申请封锁R1,因T1已封锁了R1,T2也只能等待T1释放R1上的锁。这样就出现了T1在等待T2,而T2又在等待T1的局面,T1和T2两个事务永远不能结束,形成死锁。
    所谓事务是用户定义的一个数据操作序列,这些操作要么全做要么全部做,是一个不可分割的工作单位。事务具有四个特性:原子性、一致性、隔离性和持续性。1.原子性   事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。2.一致性   事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。3.隔离性   一个事务的执行不能被其他事务干扰。4.持续性   持续性也称永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
    

原创粉丝点击