死锁产生的原因和解锁的方法要素.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
死锁产生的原因和解锁的方法要素

产生死锁的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用。 (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 二?锁的分类?? 锁的类别有两种分法:?? 1.?从数据库系统的角度来看:分为独占锁(即排它锁),共享锁和更新锁?? MS-SQL?Server?使用以下资源锁模式。?? 锁模式?描述?? 共享?(S) :读锁,用于不更改或不更新数据的操作(只读操作),如?SELECT?语句。?? 更新?(U) :(介于共享和排它锁之间),可以让其他程序在不加锁的条件下读,但本程序可以随时更改。 读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。当我们用UPDLOCK来读取记录时可以对取到的记录加上更新锁,从而加上锁的记录在其它的线程中是不能更改的只能等本线程的事务结束后才能更改,我如下示例: BEGIN TRANSACTION --开始一个事务 SELECT Qty FROM myTable WITH (UPDLOCK) WHERE Id in (1,2,3) UPDATE myTable SET Qty = Qty - A.Qty FROM myTable AS A INNER JOIN @_Table AS B ON A.ID = B.ID COMMIT TRANSACTION --提交事务 这样在更新时其它的线程或事务在这些语句执行完成前是不能更改ID是1,2,3的记录的.其它的都可以修改和读,1,2,3的只能读,要是修改的话只能等这些语句完成后才能操作.从而保证的数据的修改正确. ?? 排它?(X):写锁。 用于数据修改操作,例如?INSERT、UPDATE?或?DELETE。确保不会同时同一资源进行多重更新。?? 意向锁?用于建立锁的层次结构。意向锁的类型为:意向共享?(IS)、意向排它?(IX)?以及与意向排它共享?(SIX)。?? 架构锁?在执行依赖于表架构的操作时使用。架构锁的类型为:架构修改?(Sch-M)?和架构稳定性?(Sch-S)。?? 大容量更新?(BU)?向表中大容量复制数据并指定了?TABLOCK?提示时使用。?? 共享锁? 共享?(S)?锁允许并发事务读取?(SELECT)?一个资源。资源上存在共享?(S)?锁时,任何其它事务都不能修改数据。一旦已经读取数据,便立即释放资源上的共享?(S)?锁,除非将事务隔离级别设置为可重复读或更高级别,或者在事务生存周期内用锁定提示保留共享?(S)?锁。?? 更新锁? 更新?(U)?锁可以防止通常形式的死锁。一般更新模式由一个事务组成,此事务读取记录,获取资源(页或行)的共享?(S)?锁,然后修改行,此操作要求锁转换为排它?(X)?锁。如果两个事务获得了资源上的共享模式锁,然后试图同时更新数据,则一个事务尝试将锁转换为排它?(X)?锁。共享模式到排它锁的转换必须等待一段时间,因为一个事务的排它锁与其它事务的共享模式锁不兼容;发生锁等待。第二个事务试图获取排它?(X)?锁以进行更新。由于两个事务都要转换为排它?(X)?锁,并且每个事务都等待另一个事务释放共享模式锁,因此发生死锁。?? 若要避免这种潜在的死锁问题,请使用更新?(U)?锁。一次只有一个事务可以获得资源的更新?(U)?锁。如果事务修改资源,则更新?(U)?锁转换为排它?(X)?锁。否则,锁转换为共享锁。?? 排它锁? 排它?(X)?锁可以防止并发事务对资源进行访问。其它事务不能读取或修改排它?(X)?锁锁定的数据。?? 意向锁? 意向锁表示?SQL?Server?需要在层次结构中的某些底层资源上获取共享?(S)?锁或排它?(X)?锁。例如,放置在表级的共享意向锁表示事务打算在表中的页或行上放置共享?(S)?锁。在表级设置意向锁可防止另一个事务随后在包含那一页的表上获取排它?(X)?锁。意向锁可以提高性能,因为?SQL?Server?仅在表级检查意向锁来确定事务是否可以安全地获取该表上的锁。而无须检查表中的每行或每页上的锁以确定事务是否可以锁定整个表。? 意向锁包括意向共享?(IS)、意向排它?(IX)?以及与意向排它共享?(SIX)。?? ?? 死锁原理 ??? 根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。 ??? 死锁的四个必要条件: 互斥条件(

文档评论(0)

4477704 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档