文件名称:避免的方法-ubuntu 18.04 安装opencv3.4.5的教程(图解)
文件大小:4.99MB
文件格式:PDF
更新时间:2024-07-15 01:58:58
数据库系统概 王珊 课后习题
四、活锁和死锁 1.活锁 (1)定义 如果事务 T1*了数据 R,事务 T2又请求* R,于是 T2等待。T3也请求* R,当 T1释放了 R 上的* 之后系统首先批准了 T3的请求,T2仍然等待。然后 T4又请求* R,当 T3释放了 R 上的*之后系统又批准了 T4的请求……T2有可能永远等待,这就是活锁的情形,如图 11-2所示。 图 11-2 死锁与活锁示例 (2)避免的方法 避免活锁的简单方法是采用先来先服务的策略。当多个事务请求*同一数据对象时,*子系统按请求封 锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。 2.死锁 (1)定义 如果事务 T1*了数据 R1,T2*了数据 R2,然后 T1又请求* R2,因 T2已*了 R2,于是 T1等待 T2 释放 R2上的锁;接着 T2又申请* R1,因 T1已*了 R1,T2也只能等待 T1释放 R1上的锁。 (2)避免的方法 在数据库中解决死锁问题主要有两类方法,一类方法是采取一定措施来预防死锁的发生,另一类方法是允许 发生死锁,采用一定手段定期诊断系统中有无死锁,若有则解除之。 ①死锁的预防 在数据库中,产生死锁的原因是两个或多个事务都已*了一些数据对象,然后又都 请求对已被其他事务*的数据对象加锁,从而出现死等待。防止死锁的发生其实就是要破坏产生死锁的条 件。预防死锁通常有以下两种方法。 a.一次*法 一次*法要求每个事务必须一次将所有要使用的数据全部加锁,否则就不能继续执行。一次*法虽然可 以有效地防止死锁的发生,但也存在问题。 第一,一次就将以后要用到的全部数据加锁,势必扩大了*的范围,从而降低了系统的并发度; 第二,数据库中数据是不断变化的,原来不要求*的数据在执行过程中可能会变成*对象,所以很难事 先精确地确定每个事务所要*的数据对象,为此只能扩大*范围,将事务在执行过程中可能要*的数据对 象全部加锁,这就进一步降低了并发度。 b.顺序*法 101