死锁条件:
互斥:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。
请求等待:当进程因请求资源而阻塞时,对已获得的资源保持不放。
不可剥夺:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。
循环等待:在发生死锁时,必然存在一个进程–资源的环形链。
死锁预防:
破坏互斥条件:加锁就是为了线程互斥,所以一般不会破坏这个条件。
破坏请求等待:线程满足所有资源需求后再进行资源分配。
破坏不可剥夺:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源。
破坏循环等待:给每个线程分配一个序号,按序分配资源。
死锁避免:
银行家算法:允许进程动态地申请资源,但系统再进行资源分配之前,应先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程,否则让进程等待。可用资源向量、最大需求矩阵、分配矩阵、需求矩阵。
安全状态是指系统能按某种进程推进顺序(p1,p2,…pn)为每个进程pi分配其所需的资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺序完成。
死锁检测:
通过资源分配图,如果分配图没有环,那么系统就没有进程死锁。如果分配图有环,那么可能存在死锁。
解除死锁:
当发现有进程死锁后,便应立即把它从死锁状态中解脱出来,常采用的方法有:
剥夺资源:从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态;
撤消进程:可以直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态.消除为止;所谓代价是指优先级、运行代价、进程的重要性和价值等。
Java死锁
于 2022-03-01 14:57:49 首次发布