您的位置:首页 > 新闻资讯 >文章内容
多线程容易发生死锁的原因?怎么应对多线程的死锁问题?
来源:互联网 作者:admin 时间:2019-03-09 16:05:58

  爬虫使用多线程的过程中,若不小心,容易出现多线程死锁的情况,这是什么原因导致的呢?什么情况下会发生多线程死锁呢?若是发生多线程死锁,我们应该怎么处理呢?下面就去了解下关于多线程死锁问题。


  一、多线程容易发生死锁的原因


  1.顺序不当


  进程在运行过程中,请求和释放资源的顺序不当,也同样会导致死锁。例如,并发进程P1、P2分别保持了资源R1、R2,而进程P1申请资源R2,进程P2申请资源R1时,两者都会因为所需资源被占用而阻塞。


  信号量使用不当也会造成死锁。进程间彼此相互等待对方发来的消息,结果也会使得这些进程间无法继续向前推进。例如,进程A等待进程B发的消息,进程B又在等待进程A发的消息,可以看出进程A和B不是因为竞争同一资源,而是在等待对方的资源导致死锁。


多线程容易发生死锁的原因?怎么应对多线程的死锁问题?


  2.资源竞争


  通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在运行过程中,会因争夺资源而陷入僵局,如磁带机、打印机等。只有对不可剥夺资源的竞争才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的。


  二、怎么应对多线程的死锁问题


  1.预防死锁


  这是一种较简单和直观的事先预防的方法。方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。预防死锁是一种较易实现的方法,已被广泛使用。但是由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量降低。


  2.避免死锁


  事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的的四个必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。(安全状态、银行家算法)


  3.检测死锁


  这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,此方法允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当措施,从系统中将已发生的死锁清除掉。


  4.解除死锁


  这是与检测死锁相配套的一种措施。当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。常用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。死锁的检测和解除措施,有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。(资源剥夺法,撤销进程法,进程回退法)


  多线程死锁问题是面试的热门问题,因此即使所有了解,也是要多注意一些关于多线程死锁问题,比如造成的原因,怎么预防,出现问题的时候怎么处理等,这些都是需要去掌握的。


相关文章内容简介
推荐阅读
  • 23 2019-01
    代理IP有什么用?好用的代理IP推荐

    目前互联网早已成为了我们在日常生活中密不可分的一部分,不仅是用到互联网娱乐生活,也有许多工作是在互联网的前提下才能够进行的,随着互联网的发展,很多的业务转移到网络中,例如

  • 27 2019-06
    代理服务器隐藏IP地址效果如何

    代理服务器隐藏IP地址效果如何?首先说说隐藏真实IP的方法,最简单的方法就是使用代理服务器。与直接连接到Internet相比,使用代理服务器能保护上网用户的IP地址,从而保障上网安全。

  • 27 2019-07
    理性认识使用爬虫代理

    爬虫代理虽然是可以突破网络的IP限制,但是这不代表使用了爬虫代理,就能无所不能了,我们需要理性认识使用爬虫代理。

  • 07 2019-08
    高质量爬虫代理有助于电商行业

    高质量爬虫代理有助于电商行业!有目共睹如今电商事业发展的如火如荼,但是很多商家以前要为自己添加客源还是需要很多高质量爬虫代理。因为他们平时所用的添加客源的平台功能是非常单

  • 25 2019-04
    怎么获取到最新可用的爬虫代理?

    怎么获取到最新可用的爬虫代理?如今,网络发展比较快的,大家对代理的需求也逐渐增多,即使网上有很多免费的,但是由于质量上的需求,还是很多人要用好的,新的爬虫代理,所以爬虫代

  • 08 2019-04
    Python爬虫框架--scrapy的运行和优缺点

    我们编写爬虫是可以使用框架的,使用了框架写爬虫会更加容易些,不过前提是我们熟悉这个框架,清楚其优缺点,这样运用起来也事半功倍的。今天就跟小编去了解下scrapy这个爬虫框架的运行

在线客服
大客户VIP渠道
点击这里给我发消息
讨论QQ群
HTTP代理IP爬虫
客服电话
13318873961