做的好的装修公司网站网站策划案需要包括哪些
news/
2025/9/23 23:22:55/
文章来源:
做的好的装修公司网站,网站策划案需要包括哪些,网站建设北京市,在家做私房菜的网站一、引言
1、死锁是因采用封锁技术实现并发控制而产生的一种运行事务被阻塞或等待的现象
2、如果利用严格两阶段封锁协议来解决我们前面提到的“更新丢失”这种数据不一致问题#xff0c;非串行调度中的事务T1首先获得数据对象X上的读锁并开始执行#xff0c;随后事务T2也获…一、引言
1、死锁是因采用封锁技术实现并发控制而产生的一种运行事务被阻塞或等待的现象
2、如果利用严格两阶段封锁协议来解决我们前面提到的“更新丢失”这种数据不一致问题非串行调度中的事务T1首先获得数据对象X上的读锁并开始执行随后事务T2也获得数据对象X上的读锁开始执行。当事务T1想对X写入新值时则需将读锁升级为写锁但其申请的数据对象X上的写锁与事务T2当前所持有的读锁不相容事务T1申请的写锁得不到满足事务T1需要等待当事务T2想对数据对象X写入新值时也需将读锁升级为写锁但其申请的数据对象X上的写锁也与事务T1当前所持有的读锁不相容事务T2也不能获得数据对象X上的写锁事务T2也需要等待这就造成两个并发事务都不能继续执行并相互等待对方释放锁进入死锁状态 3、根据发生死锁时并发事务的等待状态的不同可将死锁细分为“活死锁”简称“活锁”和“死死锁”简称“死锁”处理死锁的方法包括预防和检测
二、活锁
活锁是指并发事务中有部分事务因封锁请求得不到满足而长期处于等待的状态但其他事务仍可以继续运行下去。处于长期等待状态的事务也称作被“饿死”
比如这里给出的4个并发事务的封锁情况事务T1首先获得数据对象A上的读锁事务T2在事务T1没有释放锁前对数据对象A的写锁申请被拒绝T2处于等待状态但事务T3、事务T4对数据对象A的读锁申请可依次得到满足能够继续执行导致事务T1释放锁后事务T2仍然处于等待状态等待其他事务释放锁形成活锁 三、活锁的预防
避免发生活锁的简单方法是采用先来先服务的策略当多个事务申请封锁同一数据对象时按申请封锁的先后次序对这些事务排队该数据对象上的锁一旦释放申请队列的第一个事务首先获得锁
四、死锁
死死锁是指并发事务中的事务各自拥有某数据库对象上的“锁”并去申请其他事务对某数据库对象所持有的“锁”因申请得不到满足而产生的循环等待状态。
比如前面提到的利用严格两阶段封锁协议解决“更新丢失”问题中的事务T1、T2分别等待对方释放锁同时又都持有对方所申请的锁两个事务将一直等待下去谁也不能完成形成死锁 利用两阶段进行并发控制难免会造成并发事务相互间申请与另一个事务已获得的锁不相容的锁或多个事务在同一个数据对象上持有共享锁并都希望将锁升级的现象,从而导致出现死锁
五、死锁的预防和检测
1、因此DBMS应能够对可能发生的死锁进行处理处理死锁的方法大致分为两种
1一种是预防死锁即对死锁加以预防防止发生死锁。预防死锁发生的方法有
一次封锁法。该方法要求每个事务必须获得要访问的所有数据对象上的锁后才能开始执行而不是先占有部分锁顺序封锁法。该方法将数据对象按某种顺序排序所有并发事务也按这个顺序申请数据对象上的锁那么就不会由于相互等待所需要的锁而导致死锁 2一种是检测并解除死锁即允许死锁发生但要及时检测并进行解除。检测并解除死锁的方法有
超时回滚法。即对事务的执行时间加以限制如果某个事务的执行时间超过了这个限制就认为其发生了死锁将其回滚 。当一个事务因超时而回滚后该事务将释放其持有的锁其他事务则有可能申请到所需要的锁执行完成。比如在一般事务的执行时间为几毫秒的数据库系统中以1分钟为超时时限则超时回滚的应是陷入死锁的事务该方法实现简单但仍有可能误判死锁但超时时限设置得过长则又不能及时发现死锁
2、DBMS常用的处理死锁的方法是事务等待图法该方法不仅可预防死锁也可对死锁进行检测
1事务等待图是一个由结点和边构成的有向图。GTU
图中的每个结点表示正在运行的事务图中的每条有向边表示一个事务在等待获取另一个事务释放其拥有的锁。
比如在调度中事务T2先读取数据对象A可获得A上的读锁然后事务T1要写数据对象A则要申请A上的写锁此时事务T1需要等待事务T2释放其已获取的读锁r2(A)w1(A)则在事务等待图中应存在结点T1和T2并在结点T1和T2之间划一条从T1指向T2的有向边 2用事务等待图可动态反应系统中并发事务申请等待数据对象上的锁的情况
3若事务等待图中存在环路如图中存在由红色有向边构成的有向环路则表示系统中存在并发事务的循环等待情况发生了死锁 4系统需周期地比如每隔1min检测事务等待图当系统检测到事务等待图中存在环路后将选择环路中一个撤销该事务所需代价最小的事务。比如图中的事务T3将其回滚被撤销的事务将不再申请锁且释放其持有的所有锁原有环路中至少有一个事务比如图中的事务T2可以执行不用再等待该事务完成后又会释放其持有的锁以此类推原有环路中的其他事务也能陆续执行完成解除死锁 5事务等待图可以用来在死锁形成后检测死锁也可以用来预防死锁的形成。避免死锁的一种策略就是回滚所提请求将导致等待图中出现环路的任一事务
3、举例 下面来看在并发事务的该调度执行过程中事务等待图的变化情况
首先事务T1可获得数据对象A上的读锁读取对象A然后事务T3可获得数据对象B上的读锁读取对象B事务T1又可获得数据对象C上的写锁写对象C事务T3又可获得数据对象D上的写锁写对象D此时均没有冲突操作没有事务等待情况
但当事务T2要读数据对象C时因事务T1已获得数据对象C上的写锁则事务T2只能等事务T1释放锁则在事务等待图中会产生结点T2到结点T1的一条边 当事务T1要写数据对象B时因事务T3已获得数据对象B上的读锁则事务T1也只能等事务T3释放锁则在事务等待图中会产生结点T1到结点T3的一条边 当事务T4要写数据对象D时因事务T3已获得数据对象D上的写锁则事务T4也只能等事务T3释放锁则在事务等待图中会产生结点T4到结点T3的一条边 当事务T3要写数据对象A时因事务T1已获得数据对象A上的读锁则事务T3也只能等事务T1释放锁则在事务等待图中会产生结点T3到结点T1的一条边。此时在事务等待图中出现了环路即事务T1、事务T3相互等待发生死锁 可将所提请求将导致出现环路的事务T3回滚释放其拥有的数据对象B和D上的锁w1(B)和w4(D)操作可继续执行 或将事务T1回滚释放其拥有的数据对象A和C上的锁r2(C)、w3(A)操作可继续执行 六、小结
1、并发事务因竞争不到所需的共享锁资源无论是长期等待处于饿死的状态还是相互等待处于死锁的状态均要造成系统性能的降低
2、大多数DBMS通过判断事务等待图是否形成环路来避免或解除死锁
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914212.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!