死锁
死锁:两个或两个以上线程在执行过程中,由于竞争资源而造成的阻塞问题,若无外力作用下,他们将无法推荐下去,此时系统处于死锁状态。
死锁的危害:
-
导致程序得不到正确的运行结果(因为程序产生死锁,发生阻塞,不会继续向下执行);
-
浪费资源:产生死锁,最少有两个线程会发生阻塞;
-
产生新的死锁:产生死锁的线程会一直占有锁资源,会导致其他尝试获取该锁的线程也发生死锁,产生多米诺效应。
死锁产生的原因:
-
因竞争资源产生死锁;
-
进程顺序推进不当产生死锁;
死锁的必要条件:
-
互斥条件:资源每次只能是一个线程使用;
-
请求与保持条件:一个线程因请求资源而阻塞时,对已获取的资源保持不释放;
-
不可剥夺条件:线程已获取的资源,在未使用之前,不能强行剥夺,只能在使用完时由自己释放;
-
循环等待条件:若干线程之间形成一种头尾相连接的循环等待资源关系。
死锁的预防:破坏四个必要条件之一。