首页 > 试题广场 >

什么是死锁(deadlock)?

[问答题]
面试时就说你录用我我就告诉你什么是死锁,对面说你告诉我我再录用你
发表于 2019-08-01 14:10:39 回复(8)
进程A占有对象1的锁,进程B占有对象2的锁,进程A需要对象2的锁才能继续执行,所以进程A会等待进程B释放对象2的锁,而进程B需要对象1的锁才能继续执行,同样会等待进程A释放对象1的锁,由于这两个进程都不释放已占有的锁,所以导致他们进入无限等待中
发表于 2016-04-11 21:14:27 回复(7)
死锁 :是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去
 
(1) 因为系统资源不足。
(2) 进程运行推进顺序不合适。
(3) 资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
一不满足,就不会发生死锁。
死锁的解除与预防:
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和
解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确
定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态
的情况下占用资源。因此,对资源的分配要给予合理的规划。
编辑于 2016-09-03 09:16:57 回复(0)
  当线程1和2都已经成功获取到第一个锁时,死锁就发生了。 
  

  //线程1 
  Synchorized(objectA){ 
      Synchorized(objectB){ 
          //操作

      } 
  } 
  

     //线程2  
     Synchorized(objectB){  
         Synchorized(objectA){  
             //操作
  
         }  
     }  

编辑于 2016-02-03 16:47:35 回复(0)
死锁 :是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
原因:
(1) 因为系统资源不足。
(2) 资源分配不当等。
(3) 进程运行推进顺序不合适。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
(3) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
死锁的解除与预防:
理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源。因此,对资源的分配要给予合理的规划。
其中最简单的方法就是线程都是以同样的顺序加锁和释放锁,也就是破坏了第四个条件。
编辑于 2017-09-18 13:02:37 回复(0)
死锁的四个条件 1.互斥 2.保持锁并请求锁 3.不可抢夺 4.循环等待
发表于 2016-05-11 11:28:01 回复(0)
死锁的必要条件,怎么处理死锁。
	产生死锁的原因主要是:
  (1) 因为系统资源不足。
  (2) 进程运行推进的顺序不合适。
  (3) 资源分配不当等。
  如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
  就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
  产生死锁的四个必要条件:
  (1) 互斥条件:一个资源每次只能被一个进程使用。
  (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
  (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
  (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
  这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
  一不满足,就不会发生死锁。
  死锁的解除与预防:
  理解了死锁的原因,尤其是产生死锁的四个必要条件,就可以最大可能地避免、预防和
  解除死锁。所以,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何确
  定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态
  的情况下占用资源。因此,对资源的分配要给予合理的规划。

发表于 2016-08-15 18:45:54 回复(0)
两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程都陷入了无限的等待中。
发表于 2015-10-29 12:10:41 回复(0)
两个***装逼,都说不吃馒头只吃面包。可是,桌上只有馒头,结果,两货装逼都挂了。。。
发表于 2017-04-21 10:49:18 回复(1)
死锁后的解决办法:
1、撤消陷于死锁的全部进程;
2、逐个撤消陷于死锁的进程,直到死锁不存在;
3、从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。
4、从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态

发表于 2020-02-04 22:23:14 回复(0)
两个或两个以上的进程,由于竞争资源或彼此通信而造成的一种相互阻塞的现象。
若无外力作用,它们将无法推进下去。
发表于 2016-03-10 22:23:53 回复(0)
死锁定义:多个进程对同一共享资源的请求等不到满足而陷入互相等待的一种状态,如果没有外力因素干预,将一直持续这种状态。 死锁产生的四个必要条件(缺一不可): 1. 互斥条件:共享资源只能一次被一个进程所占用,即资源排他性。 2. 不可剥夺条件:当资源被一个进程占用时,其他进程不能剥夺其使用共享资源,只能等待其主动释放。 3. 请求与保持条件:进程占用当前共享资源,而请求其他共享资源,此时进程进入阻塞状态,但其对自己占用的资源并不释放。 4. 循环等待条件:多个进程因请求彼此的资源而陷入循环等待链中。
发表于 2021-03-13 08:05:01 回复(0)
<p>如果两个线程都想进入对方线程执行内容,没有释放自己的锁的话就会产生死锁</p><p><br></p>
发表于 2020-10-20 09:55:19 回复(0)
<p>多个进程因为对系统资源的竞争,导致进程之间相互等待,没有外界推动,无法推进的情况</p><p><br></p>
发表于 2020-09-07 20:23:44 回复(0)
死锁是因为多个线程互相争夺资源而互相等待,死锁有4个条件,需要了解一下
编辑于 2020-08-30 11:36:13 回复(0)
死锁是指多个进程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。同步代码块的嵌套就容易发生死锁,第一个进程外面的同步代码块需要的锁对象是a,里面需要的是b,第二个进程外面需要的是b,里面需要的是a,就发生死锁
发表于 2020-08-14 08:49:08 回复(0)

死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。死锁产生有四个条件:

1.互斥条件:一个资源每次只能被一个进程使用;

2.不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺;

3.请求和保持条件:进程因请求资源而阻塞,对已有资源不放弃;

4.循环等待条件:若干进程形成头尾相连的资源等待关系。

发表于 2020-07-13 22:31:51 回复(0)
线程1、2用到了相同的资源,第一个线程用到这个资源想用另一个的时候,结果被另一个线程占用,而且这个线程也在等待之前线程释放锁,这种为了资源互相等待就是死锁
发表于 2020-07-04 18:05:32 回复(0)
两个或两个以上的进程,由于竞争资源或彼此通信而造成的一种相互阻塞的现象。若无外力作用,它们将无法推进下去。进程死锁四个条件:1.资源互斥条件 2.不剥夺 3.请求和保持 4.循环链请求资源
发表于 2020-06-26 19:28:45 回复(0)
进程A占有对象1的锁,进程B占有对象2的锁,进程A需要对象2的锁才能继续执行,所以进程A会等待进程B释放对象2的锁,而进程B需要对象1的锁才能继续执行,同样会等待进程A释放对象1的锁,由于这两个进程都不释放已占有的锁,所以导致他们进入无限等待中
发表于 2020-06-24 20:45:35 回复(0)