死锁(Deadlock)
什么是死锁死锁是多个进程或线程因竞争资源而陷入相互等待的状态,若无外力干预,所有进程或线程将无法继续执行。例如各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象就是死锁。什么时候产生死锁互斥条件:在一段时间内某资源只由一个进程或线程占用,如果此时还有其它进程或线程请求资源,则请求者只能等待,直至占有资源的进程或线程释放。例如锁资源一次只能被一个线程占用 。请求和保持条件(持有并等待):指进程或线程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程或线程占有,此时请求进程或线程阻塞,但又对自己已获得的其它资源保持不放 。不剥夺条件(不可抢占):指进程或线程已获得的资源,在未使用完之前不能被剥夺,只能在使用完时由自己释放 。环路等待条件(循环等待):指在发生死锁时,必然存在一个进程 - 资源的环形链,即存在线程的循环等待链,每个线程都在等待下一个线程持有的资源 。怎么避免死锁避免使用多个资源:如果能够设计出仅需要一个资源的算法或方法,就可以完全避免死锁的发生。破坏循环等待条件:通过定义资源的有序分配规则,使系统中所有进程按照一定的顺序请求资源,避免发生循环等待。如银行家算法(Banker's Algorithm)就是一种通过动态检测资源分配情况来避免死锁的算法。使用资源预先分配策略:系统在进程启动时,要求事先申请所需的全部资源,确保资源的可用性,从而避免