关于死锁你了解多少,通过“让APP随手机壳改变颜色,程序员和产品经理大家”这一事,了解下死锁可好?

2020-10-26 10:58:42 浏览数 (1)

前言

关于死锁,你了解多少?

本文内容如下:

各位亲们,请原谅我开启了仅粉丝可见,并不是为了赚粉丝,是因为一些可恶的网站大批量的爬我们这些原创博主的文章。开启了仅粉丝可见后他们就无法进行爬取后面的内容,也麻烦大家点个小小的关注才能看到后面的内容,当然了内容不好,看完也可以取消关注哈,嘿嘿。

文章目录

  • 前言
  • 一、你知道死锁是什么吗?
  • 二、通过"让APP要随手机壳改变颜色,难怪程序员要和产品经理打架?"看死锁的产生
  • 三、死锁的定义
  • 四、产生死锁的4个必要条件
  • 五、处理死锁的4种基本方法
    • (一)预防死锁
    • (二)避免死锁
    • (三)检测死锁
    • (四)解除死锁
  • 五、避免方法
    • (一)破坏请求和保持(部分分配)条件
    • (二)破坏不可剥夺(不可抢占)条件
    • (三)破坏环路等待条件
  • 六、死锁的结论

一、你知道死锁是什么吗?

系统中诸多进程之间的一种牵制状态,与拥堵不同,无法自解。

例:P1,P2两道进程,对资源R1,R2都有需求且须同时拥有两个资源才能继续工作

某时刻P1获取R1P2获取R2,这样,P1和P2都无法获取另一个资源且不会主动释放已有资源于是死锁产生

二、通过"让APP要随手机壳改变颜色,难怪程序员要和产品经理打架?"看死锁的产生

这个故事发生在2018年,已经过去2年了。为了方便朋友们理解,让我重新搬过来,重新回顾一下发生的经过,来解释死锁的产生,挺合适的。

为了还原情景,我搬过来了一段有意思的图文:

“据称某互联网公司产品经理提了个要求,要求APP开发人员可以做到根据用户的手机壳来改变软件主题颜色,然后就干起来了”。

原来是因为:

产品经理要求做个改造,让APP主题颜色跟随手机壳颜色变换

(程序员:那我先来改造一下你吧),

这个要求的过分程度,

真是不亚于设计界,

风靡一时的配色——五彩斑斓的黑

真相1:

打架当事人不是产品经理和程序员

是平安产险科技中心外包人员

记者经过核实得知,视频里打架的二位是深圳平安产险科技中心外包人员。记者联系了视频中打架的当事人之一谢某,谢某告诉记者,他确是平安的员工,但网传的原因并不真实,他根本不认识与他发生争执的李某。

真相2:

打架原因不是因为要求太苛刻

是因为“你瞅啥?!!”

谢某称,上周一(7月23日)午休时,他趴在座位上休息,起来的时候,看了一眼经过的李某,结果被李某无端挑衅,“他冲到我的座位面前,指着我问,‘你瞅啥?!‘ ”,随后二人发生争执。

其实:

主要是是这个图:

你有你的理,我也有我的理;

你不让我,我不让你;

就产生了死锁

来源搜狐新闻:https://www.sohu.com/a/245084564_369533

注:如果不合适,请留言,立马删除。

三、死锁的定义

玩归玩、闹归闹。还是需要知道正规的死锁的定义的。

如下:

一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到该资源,这种现象称为进程死锁,这一组进程就称为死锁进程

四、产生死锁的4个必要条件

1、互斥条件:

涉及的资源是非共享的,进程对其访问是互斥的。

2、不剥夺(不可抢占)条件:

不能强行剥夺进程拥有的资源,否则将会使进程的工作前功尽弃。

3、请求和保持(部分分配)条件:

进程在等待新资源时继续占有已分配的资源。

4、环路条件:

存在一种进程的循环链,链中的每一个进程已获得的资源同时被链中的下一个进程所请求。

五、处理死锁的4种基本方法

(一)预防死锁

通过设置某些限制条件,去破坏死锁四个必要条件中的一个或多个,来防止死锁。

较易实现,广泛使用,但由于所施加的限制往往太严格,可能导致系统资源利用率和系统吞吐量的降低

(二)避免死锁

是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免死锁的发生。

实现较难,只需要较弱的限制条件,可获得较高的资源利用率和系统吞吐量。

(三)检测死锁

事先并不采取任何限制,也不检查系统是否进入不安全区,允许死锁发生。

可通过检测机构及时检测出死锁的发生,并精确确定与死锁有关的进程和资源,然后采取适当措施,将系统中已发生的死锁清除掉。

(四)解除死锁

与检测死锁相配套,用于将进程从死锁状态解脱出来。

常用的方法是撤消或挂起一些进程。以回收一些资源,再将它们分配给处于阻塞状态的进程,使之转为就绪状态。

实现难度大,但可获得较好的资源利用率和系统吞吐量。

五、避免方法

在系统设计时确定资源分配算法,运行过程中按照算法进行资源管理,保证不发生死锁。

做法是破坏死锁的四个必要条件之一

(一)破坏请求和保持(部分分配)条件

系统要求所有进程要一次性申请在整个运行过程中所需的全部资源。若系统有足够资源则完全分配。

优点:

简单、易于实现且安全。

缺点:

一个用户在作业运行之前可能提不出他的作业将要使用的全部设备。

用户作业必须等待,直到所有资源满足才能运行。实际上某些资源可能要到运行后期才会用到。

作业运行期间,对某些设备的使用时间很短,甚至不会用到。如:当用户作业出错时才需要打印机输出错误信息,但采用静态分配法必须把打印机分配给该作业,并长期占用。采用该方法对系统来说是非常浪费的。

(二)破坏不可剥夺(不可抢占)条件

一个已拥有资源的进程,若它再提出新资源要求而不能立即得到满足时,它必须释放已经拥有的所有资源。以后需要时再重新申请。

可以逐个申请资源,不满足时释放所有资源。

缺点:

实现复杂、要付出很大的代价,使前段时间的工作失效,有可能因反复申请和释放资源,使进程无限地推迟。

(三)破坏环路等待条件

系统中的所有资源都有一个确定的唯一号码,所有分配请求必须以序号上升的次序进行。

例如:系统中有下列设备:输入机(1),打印机(2),穿孔机(3),磁带机(4),磁盘(5)。有一进程要先后使用输入机、磁盘、打印机,则它申请设备时要按输入机、打印机、磁盘的顺序申请。

优点:

同前两法相比,其资源利用率和系统吞吐量有较明显的改善。

缺点:

进程实际需要资源的顺序不一定与资源的编号一致,因此仍会造成资源浪费;限制了设备增加;限制了用户简单、自主地编程。

六、死锁的结论

(1)参与死锁的进程最少是两个。

两个以上进程才会出现死锁

(2)参与死锁的进程至少有两个已经占有资源。

请求与保持

(3)参与死锁的所有进程都在等待资源。

(4)死锁的进程是当前系统中所有进程的子集。

(5)如果死锁发生,会浪费大量系统资源,甚至导致系统崩溃。

0 人点赞