美文网首页iOS 多线程
iOS-多线程-死锁

iOS-多线程-死锁

作者: doudo | 来源:发表于2017-09-26 14:58 被阅读104次

所谓死锁,是指两个或两个以上的线程在执行过程中,因争夺资源(数据源、内存等,变量不是资源)而造成的一种相互等待的现象,若无外部处理作用,它们都将无限等待下去。

四个必备条件:

  • 互斥:所谓互斥就是线程在某一时间内独占资源。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。
  • 请求与保持:指线程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
  • 不剥夺:指线程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
  • 环路等待:指在发生死锁时,必然存在一个线程——资源的环形链。

开发中碰到的死锁:

  1. 在GCD中,主要的死锁就是当前串行队列里面同步执行当前串行队列。解决的方法就是将同步的串行队列放到另外一个线程执行。
  2. 两个串行队列A、B,其中A是B的目标队列,这样队列之间会形成层级体系,B中的任务稍候都会在A中一次执行,于是排在AB中的任务都是在A中串行执行,这时如果在队列B中的块中,判断当前队列不是A那么就认为可以在队列A上执行同步派发操作,实际上会导致死锁。
    解决方案:队列特有数据。
  3. 互斥锁在已获得锁的情况下再次请求锁,线程会因为等待锁的释放而进入睡眠状态,因此就不可能再释放锁,从而导致死锁。

相关文章

  • iOS-多线程-死锁

    所谓死锁,是指两个或两个以上的线程在执行过程中,因争夺资源(数据源、内存等,变量不是资源)而造成的一种相互等待的现...

  • iOS-多线程死锁问题

    虽然作者在开发中经常会用到多线程,但是对于死锁、线程阻塞等问题还是比较模糊,一般都是先写吧,有问题再改,现在闲下来...

  • Java自学-多线程 死锁

    Java 演示多线程死锁 当业务比较复杂,多线程应用里有可能会发生死锁 步骤 1 : 演示死锁 线程1 首先占有对...

  • Java并发案例01---多线程之死锁

    多线程之死锁案例一

  • jstack命令:教你如何排查多线程问题

    这是之前的一个死锁案例: 一个多线程死锁案例,如何避免及解决死锁问题? 如程序中发生这样的死锁问题该如何排查呢?我...

  • 并发编程情况下几个相应问题简介

    1.并发编程的挑战之死锁 ​ 死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多...

  • 5. 死锁

    线程死锁 死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序...

  • 多线程分析——死锁代码demo

    前言 本文主要是对Java多线程死锁代码demo的分析,对其过程以及死锁进行了大致的概括,希望对大家有帮助。 死锁...

  • 面试官:连多线程问题你都一问三不知,还要我怎么“放水”?

    面试官:问你几个多线程相关的问题吧,说一下导致线程死锁的原因,怎么解除线程死锁? 程序员阿里:这个...死锁......

  • 线程同步中的死锁

    何为死锁 多线程各自持有不同的锁,并互相试图获取对方已持有的锁,导致无限等待的状况,称为死锁。比如: 避免死锁 避...

网友评论

    本文标题:iOS-多线程-死锁

    本文链接:https://www.haomeiwen.com/subject/kqusextx.html