iOS 多线程

iOS-多线程-死锁

2017-09-26  本文已影响104人  doudo

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

四个必备条件:

开发中碰到的死锁:

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

猜你喜欢

热点阅读