死锁概念有哪些?死锁定理是什么?

TheDisguiser 2020-05-24 19:57:55 java常见问答 8013

死锁相信做过java开发一段时间的小伙伴们都遇到过吧,今天我们要介绍的就是死锁的一些基础概念死锁定理,希望看了这篇文章后,大家对死锁能够有着更深的了解,避免再在程序里遇到死锁。

一、死锁基础概念

死锁,就是当两个或以上的线程同时拥有对方需要的资源,谁也不想让谁,导致大家都处理等待状态,没有外力就无法结束,这种状态就叫死锁。举个例子:假设这里有一个线程A,按照先锁a再获得锁b的的顺序获得锁,而在此同时又有另外一个线程B,按照先锁b再锁a的顺序获得锁。这就是死锁

死锁产生条件

1.首先是互斥条件,因为共享资源是只能被一个线程占用的;

2.其次是占有且等待,例如线程 t1 已经取得共享资源 s1,那么在尝试获取共享资源 s2 的时候,不不会释放共享资源 s1的;

3.还有不可抢占的问题,因为其他线程是不能强行抢占线程 t1 占有的资源 s1的;

4.最后可能就是循环等待的问题了,比如说线程 t1 等待线程 t2 占有的资源,线程 t2 等待线程 t1 占有的资源

二、死锁定理

进程的死锁问题可以用有向图进行准备而形象的描述,这种有向图称为系统资源分配图.一个系统资源分配图SRAG可定义为一个二元组,即SRAG=(V,E),其中V是顶点的集合,而E是有向边的集合.顶点集合可分为两种部分:P=(P1,P2,…Pn),是由系统内的所有e79fa5e98193e78988e69d8331333361326337进程组成的集合,每一个Pi代表一个进程;R=(r1,r2,…rm),是系统内所有资源组成的集合,每一个ri代表一类资源。

基于上述资源分配图的定义,可给出判定死锁的法则,又称为死锁定理。

(1) 如果资源分配图中没有环路,则系统没有死锁

(2) 如果资源分配图中出现了环路,则系统中可能存在死锁. 预防死锁的方法:

资源一次性分配:(破坏请求和保持条件)

可剥夺资源:即当某进程新的资源未满足时,释放已占有的资源(破坏不可剥夺条件)

资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)

所以,在系统设计、进程调度等方面需要特别注意如何不让这四个必要条件成立,以及如何确定资源的合理分配的算法,来避免一个线程永久占据系统资源。此外,也要防止进程在处于等待状态的情况下占用资源,在系 统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予 以分配 。因此,对资源的分配要给予合理的规划。

以上就是今天关于死锁的全部内容了,其实只要你注意代码的编写规范,死锁还是很好避免的,如果你还想了解更多如死锁这样的java入门知识,请持续关注我们的网站了解吧。

推荐阅读:

死锁的原因及解决方法,死锁怎么解决?

死锁的四个必要条件是什么?死锁的定义

死锁产生的场景都有哪些?死锁产生的条件是什么?