首页 > 试题广场 >

数据库以及线程发生死锁的主要原因是什么?

[不定项选择题]
数据库以及线程发生死锁的主要原因是什么?
  • 资源分配不当
  • 进程运行推进的顺序不合适
  • 系统资源不足
  • 进程过多
推荐

产生死锁的原因主要是: 
(1) 因为系统资源不足。 
(2) 进程运行推进的顺序不合适。 
(3) 资源分配不当等。 
产生死锁的四个必要条件: 
(1)互斥条件:一个资源每次只能被一个进程使用。 
(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 
(3)不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 
(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

避免死锁: 
死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。 
死锁产生的前三个条件是死锁产生的必要条件,也就是说要产生死锁必须具备的条件,而不是存在这3个条件就一定产生死锁,那么只要在逻辑上回避了第四个条件就可以避免死锁。 
避免死锁采用的是允许前三个条件存在,但通过合理的资源分配算法来确保永远不会形成环形等待的封闭进程链,从而避免死锁。该方法支持多个进程的并行执行,为了避免死锁,系统动态的确定是否分配一个资源给请求的进程。 
预防死锁:具体的做法是破坏产生死锁的四个必要条件之一。

银行家算法:该算法需要检查申请者对各类资源的最大需求量,如果现存的各类资源可以满足当前它对各类资源的最大需求量时,就满足当前的申请。换言之,仅当申请者可以在一定时间内无条件归还它所申请的全部资源时,才能把资源分配给它。这种算法的主要问题是,要求每个进程必须先知道资源的最大需求量,而且在系统的运行过程中,考察每个进程对各类资源的申请需花费较多的时间。另外,这一算法本身也有些保守,因为它总是考虑最坏可能的情况。

编辑于 2015-01-05 10:35:50 回复(1)
原因
1 系统资源不足
2 资源分配不当
3 进程推进顺序不合适
条件
1 互斥条件 :一个进程同时只能一个线程访问
2 请求与保持 :一个进程因请求资源阻塞时,对已获得资源保持不放
3 不可剥夺: 进程获取资源 未使用完时 不能强行剥夺
4 循环等待: 若干进程之间形成一种头尾相接的循环等待资源关系
编辑于 2015-01-29 16:59:22 回复(0)
不知道
发表于 2014-11-10 21:49:28 回复(0)

死锁的规范定义如下:如果一个进程集合中的每个进程都在等待只能由该进程集合中其他进程才能引发的事件,那么该进程集合就是死锁的。


产生死锁的原因主要是:


- 因为系统资源不足。

- 进程运行推进的顺序不合适。

- 资源分配不当等。


产生死锁的四个必要条件:


1. 互斥条件:每个资源要么已经分配给了一个进程,要么就是可用的。

2. 占有和等待条件:已经得到了某个资源的进程可以再请求新的资源。

3. 不可抢占条件:已经分配给一个进程的资源不能强制性地被抢占,只能被占有它的进程显式地释放;

4. 环路等待条件:死锁发生时,系统中一定有两个或者两个以上的进程组成的一条环路,该环路中的每个进程都在等待着下一个进程所占有的资源。


这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。


四种处理死锁的策略:


1. 鸵鸟策略(忽略死锁);

2. 检测死锁并恢复;

3. 仔细对资源进行分配,动态地避免死锁;

4. 通过破坏引起死锁的四个必要条件之一,防止死锁的产生。


避免死锁的主要算法是基于一个` 安全状态 `的概念。在任何时刻,如果没有死锁发生,并且即使所有进程忽然请求对资源的最大请求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。从安全状态出发,系统能够保证所有进程都能完成,而从不安全状态出发,就没有这样的保证。


` 银行家算法 `:判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求,如果满足请求后系统仍然是安全的,就予以分配。不安全状态不一定引起死锁,因为客户不一定需要其最大贷款额度。

发表于 2016-05-04 09:06:51 回复(2)
ABC
产生死锁的原因主要是:
(1) 因为系统资源不足。
(2) 进程运行推进的顺序不合适。
(3) 资源分配不当等。
产生死锁的四个必要条件
(1)互斥条件:一个资源每次只能被一个进程使用。
(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

避免死锁:
死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。
死锁产生的前三个条件是死锁产生的必要条件,也就是说要产生死锁必须具备的条件,而不是存在这3个条件就一定产生死锁,那么只要在逻辑上回避了第四个条件就可以避免死锁。
避免死锁采用的是允许前三个条件存在,但通过合理的资源分配算法来确保永远不会形成环形等待的封闭进程链,从而避免死锁。该方法支持多个进程的并行执行,为了避免死锁,系统动态的确定是否分配一个资源给请求的进程。
预防死锁 :具体的做法是破坏产生死锁的四个必要条件之一

发表于 2015-04-17 21:27:21 回复(0)

产生死锁的原因主要是:

1) 因为系统资源不足。

(2) 进程运行推进的顺序不合适。

(3) 资源分配不当等。

产生死锁的四个必要条件:

(1)互斥条件:一个资源每次只能被一个进程使用。

(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

(3)不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

发表于 2014-10-25 00:25:59 回复(0)
答案:所谓死锁指的是两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,如果无外力作用,那么它们都将无法推进下去。此时,称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。举一个简单例子加以说明死锁,人多好办事,在程序里面也是如此,所以,如果一个程序需要并行处理多个任务,那么就可以创建多个线程,但是线程多了,往往会产生冲突,当一个线程锁定了一个资源A,而又想去锁定资源B,而在另一个线程中,锁定了资源B,而又想去锁定资源A以完成自身的操作,两个线程都想得到对方的资源,而不愿释放自己的资源,造成两个线程都在等待,而无法执行,此时就是死锁。

产生死锁的原因主要有以下三个方面的内容:

① 系统资源不足。

② 进程运行推进的顺序不合适。

③ 资源分配不当。

如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则,就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。

产生死锁的四个必要条件,分别为:

① 互斥(资源独占):一个资源每次只能被一个进程使用。

② 请求与保持(部分分配,占有申请):一个进程在申请新的资源的同时保持对原有资源的占有(只有这样才是动态申请,动态分配)。

③ 不可剥夺(不可强占):资源申请者不能强行地从资源占有者手中夺取资源,资源只能由占有者自愿释放。

④ 循环等待:若干进程之间形成一种头尾相接的循环等待资源关系。例如,存在一个进程等待队列 {P1 , P2 , … , Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路。

以上四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

预防死锁的方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个。预防死锁是一种较易实现的方法,已被广泛使用。但是由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量降低。

避免死锁采用的方法是允许前三个条件存在,但通过合理的资源分配算法来确保永远不会形成环形等待的封闭进程链,从而避免死锁。具体方法有:

① 一次封锁法:每个进程(事务)将所有要使用的数据全部加锁,否则,就不能继续执行。

② 顺序封锁法:预先对数据对象规定一个封锁顺序,所有进程(事务)都按照这个顺序加锁。

③ 银行家算法:保证进程处于安全进程序列。

下列方法有助于最大限度地降低死锁:

① 按同一顺序访问对象。

② 避免事务中的用户交互。

③ 保持事务简短并在一个批处理中。

④ 使用低隔离级别。

编辑于 2018-07-21 14:40:13 回复(0)
考研王道里面说:系统资源不足不会创建进程,是不会产生死锁,只有资源分配一部分后,剩余资源不足才会导致死锁。。。
发表于 2016-12-03 19:26:03 回复(0)
产生死锁的原因主要是:  (1) 因为系统资源不足。  (2) 进程运行推进的顺序不合适。  (3) 资源分配不当等。  产生死锁的四个必要条件:  (1)互斥条件:一个资源每次只能被一个进程使用。  (2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。  (3)不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。  (4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
发表于 2016-12-15 12:53:49 回复(0)
当前的资源被某个进程所占用,其他循环等待的线程一只处于就绪状态,造成这一现象的原因是可能因为当前的资源不足,或是资源分配不合理
还有可能是线程执行的顺序不当,虽然说线程的执行是有CPU调度,时间片轮转,但是可以用特定的方法可以实现。
必要的条件是
1.从在互斥,当前的线程使用的资源只能被一个线程所使用。
2.循环等待 ,当线程执行完毕之后再去释放资源,循环使用资源。
3.当前的线程处于阻塞状态时,不能释放资源。
4.不可剥夺条件,进程已获得的资源,在末使用完之前,不能强行剥夺。

避免死锁的条件就是打破以上的必要条件
发表于 2014-11-24 21:03:45 回复(0)
死锁 单线程递归导致资源不足 不算 2个线程卡在某段代码 必须有一个先执另一个才能执行 同步代码块 迟迟执行不出来 另一个线程无法执行 叫死锁 什么原因导致同步代码块执行不出来 1递归 资源不够 2该同步代码块特别占资源 执行特别慢 短时间死锁现象 3####
发表于 2022-04-10 11:16:48 回复(0)
产生死锁的原因主要是: 
(1) 因为系统资源不足。 
(2) 进程运行推进的顺序不合适。 
(3) 资源分配不当等。 
发表于 2021-07-10 21:57:03 回复(0)
无法理解循环等待的意思
发表于 2021-03-18 15:36:15 回复(1)
<p>为什么这么多的复制怪,一个一个只复制却并不解释上面的答案。</p>
发表于 2020-10-10 16:40:20 回复(0)
可以参考
http://blog.csdn.net/wt_better/article/details/72765333
发表于 2017-05-30 17:53:54 回复(0)
为什么我觉得资源不足并不是必要条件呢?比如有很多资源,但是进程a占有资源1,进程b占有资源2,a进程请求2,b进程请求1,这样也会死锁,我觉得必要条件只有那四个
发表于 2016-09-08 07:20:18 回复(0)

产生死锁的原因主要是: 
(1) 因为系统资源不足。 
(2) 进程运行推进的顺序不合适。 
(3) 资源分配不当等。

产生死锁的四个必要条件:

(1)互斥条件:一个资源每次只能被一个进程使用。 
(2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 
(3)不可剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 
(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

避免死锁: 

死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。 
死锁产生的前三个条件是死锁产生的必要条件,也就是说要产生死锁必须具备的条件,而不是存在这3个条件就一定产生死锁,那么只要在逻辑上回避了第四个条件就可以避免死锁。 
避免死锁采用的是允许前三个条件存在,但通过合理的资源分配算法来确保永远不会形成环形等待的封闭进程链,从而避免死锁。该方法支持多个进程的并行执行,为了避免死锁,系统动态的确定是否分配一个资源给请求的进程。 
预防死锁:具体的做法是破坏产生死锁的四个必要条件之一。  

发表于 2015-09-09 17:38:46 回复(0)
B
发表于 2015-03-25 16:25:24 回复(0)
答案:ABC
这种题就是理解+记忆了。。。
产生死锁的原因主要有三个: (1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。 (3) 资源分配不当等。 
发表于 2015-01-27 11:18:17 回复(0)
mqh头像 mqh
1.有互斥资源
2.资源不可被强占
3.循环等待
4.请求和保持

破坏任意一个条件就可以避免死锁
发表于 2014-12-26 08:26:15 回复(0)
死锁原理:多个线程进程对资源的读写有冲突
死锁条件:
互斥
请求保持
不能强制剥夺
循环等待

避免死锁:
死锁预防
死锁避免
检测和解除死锁
发表于 2014-12-20 11:14:53 回复(0)