美文网首页iOS基本功
『ios』线程死锁还是队列死锁? 死锁测试

『ios』线程死锁还是队列死锁? 死锁测试

作者: butterflyer | 来源:发表于2019-02-01 11:05 被阅读20次

之前 『ios』主线程 和 主队列的关系,绝对安全的UI操作,主线程中一定是主队列?在这片文章中,总结了下主线程和主队列的关系。昨天有人在下面评论,纠结死锁的条件。正好,自己也总结下。

在测试之前我的理解:死锁的条件,就拿主线程来说,在主线程中,必须满足是同步主队列才会死锁。也就是说,必须是不会开辟新线程,并且是在同一队列中才会造成死锁,有一个不满足就不会造成死锁。

下面是测试案例

第一种情况 我们通常见到的死锁情况。

主线程中
  dispatch_sync(dispatch_get_main_queue(), ^{
      NSLog(@"%@",[NSThread currentThread]);
    });

第二种情况 新建一个串行队列同步执行

主线程中
dispatch_queue_t queue = dispatch_queue_create("test1", DISPATCH_QUEUE_SERIAL);
 dispatch_sync(queue, ^{
 
    });

这种情况不会死锁 ,因为不是同一队列中

第三种情况 新建一个串行队列同步执行 并且在里面嵌套一个同一串行队列同步执行。

主线程中
dispatch_queue_t queue = dispatch_queue_create("test1", DISPATCH_QUEUE_SERIAL);
 dispatch_sync(queue, ^{
       dispatch_sync(queue, ^{
 
       });
    });

这种情况会死锁,因为是在同一队列 test1 中,并且同步执行不开辟新线程。

第四种情况 新建二个串行队列同步执行

    dispatch_queue_t queue = dispatch_queue_create("test1", DISPATCH_QUEUE_SERIAL);
    
    dispatch_queue_t queue1 = dispatch_queue_create("test2", DISPATCH_QUEUE_SERIAL);
    
    dispatch_sync(queue1, ^{
  
        dispatch_sync(queue, ^{
    
        });
    });

这种情况不会造成死锁,会顺序执行,因为是两个不同的队列中。

通过上面这四种情况的验证,证明上面我的思路是正确的。

相关文章

  • 『ios』线程死锁还是队列死锁? 死锁测试

    之前 『ios』主线程 和 主队列的关系,绝对安全的UI操作,主线程中一定是主队列?在这片文章中,总结了下主线程和...

  • iOS 多线程面试题(死锁)

    死锁 死锁就是队列引起的循环等待 1、一个比较常见的死锁例子:主队列同步 在主线程中运用主队列同步,也就是把任务放...

  • GCD 使用过程中的出现的死锁问题

    死锁 1、 主队列在主线程同步执行 下列代码写在 viewDidLoad 中: 上面死锁的写法是: ** 主队列...

  • JavaEE面试题总结 Day39 2018-12-29

    什么是线程死锁?死锁如何产生?如何避免线程死锁? 死锁的介绍: 线程死锁是指由于两个或者多个线程互相持有对方所需要...

  • 死锁

    线程饥饿死锁 锁顺序死锁 动态锁顺序死锁通过锁顺序来避免死锁 避免死锁

  • 一次面试的记录

    面试记录 提到以下问题: 线程死锁是什么?什么样的情况会造成死锁?如何确保不会发生死锁?在串行队列中,执行 A 时...

  • Python中的各种锁

    Python之死锁 死锁分为两种情况,多进程/线程的死锁.或者是单线程的死锁. 1.首先看一下单线程的死锁,单线程...

  • Java多线程之死锁(Deadlock)及死锁避免(Deadlo

    线程死锁(Thread Deadlock) 数据库死锁(Database Deadlocks) 死锁避免 (Dea...

  • iOS 死锁案例和产生的原因

    iOS 死锁案例和产生的原因 上面的代码会打印什么呢?答案是死锁 死锁的原因是由于队列引起的循环等待: 我们在主队...

  • 同步串行导致的死锁问题

    GCD中同步操作dispatch_sync()中队列使用主队列会导致线程死锁,是众所周知的事情。但是是如何造成死锁...

网友评论

    本文标题:『ios』线程死锁还是队列死锁? 死锁测试

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