美文网首页
GCD主队列同步任务死锁的理解

GCD主队列同步任务死锁的理解

作者: 随风流逝 | 来源:发表于2017-08-18 17:38 被阅读29次
- (void)syncMain {
    dispatch_queue_t queue = dispatch_get_main_queue();
    dispatch_sync(queue, ^{
        NSLog(@"123");   });
}

在主队列中加入同步任务会造成死锁,这个在之前并没有很理解,只是知道会死锁,今天又碰到这个问题,感觉应该理解对了,举个例子说明一下。

  1. 比如有一天我不小心把身份证丢了,我就去派出所补办身份证,警察同志告诉我没有问题,可以补办,这时候我就有了一个任务,就是补办身份证(相当于主队列里的第一个任务:就是自信[self syncMain]方法)。
  2. 警察同志告诉我说补办身份证要证明我是我,这时候我就有了第二个任务(证明我是我),我就说你帮我补办出来身份证不就证明我是我了嘛,经常同志说你先证明你是你我才能帮你办身份证,然后……,相当于里面那个同步任务希望主队列帮他打印123(这时候主队列就有了第二个任务,打印123),主队列说不行我正在执行[self syncMain]方法,不能帮你打印123,同步任务说你帮我打印了123就是执行[self syncMain]方法,主队列说不行,我目前有任务在身,不能打印123,然后……,死锁就形成了
  3. 怎么解锁呢,这个时候如果有别的地方能证明我是我不就可以了,然后同步任务就说我到别的线程去执行123去,不找你了,然后一切OK
dispatch_queue_t queue = dispatch_queue_create("myQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_async(queue, ^{
    [self syncMain];
});

相关文章

  • GCD线程死锁

    GCD 以下情况下会死锁,(不考虑线程锁的情况下) 主队列中同步添加任务。 串行队列任务中添加同步任务 为什么呢?...

  • 2021--- GCD

    gcd同步,异步,串行队列,并发队列,全局队列,主队列,以及死锁。 1、gcd队列阻塞问题[https://www...

  • iOS多线程---GCD

    本文主要介绍GCD的基本概念,使用方法。 死锁 只要在同一队列中,同步任务套同步任务,一定会死锁,重点是《同一队列...

  • GCD主队列同步任务死锁的理解

    在主队列中加入同步任务会造成死锁,这个在之前并没有很理解,只是知道会死锁,今天又碰到这个问题,感觉应该理解对了,举...

  • GCD的学习笔记(One)

    并行和并发 GCD简介 GCD的任务 GCD的队列 GCD创建队列或获取队列的方法 任务的执行方式:同步执行(同步...

  • GCD分析(中)

    同步函数死锁 死锁现象 主线程因为同步函数的原因等着先执⾏任务 主队列等着主线程的任务执⾏完毕再执⾏⾃⼰的任务 主...

  • 多线程相关

    1. GCD 1. 同步/异步 串行/并发 死锁原因队列引起的循环等待主队列中所提交的任务无论是同步方式还是异步...

  • iOS多线程(一)

    多线程涉及到的概念: 进程,线程,主线程,任务,队列,死锁,串行,并行,同步,异步,GCD,NSOperation...

  • 多线程

    iOS中的几种多线程GCD1、GCD分为任务和队列,任务(同步,异步)队列(串行,并发),同步串行,同步主队列的情...

  • 2022-11-17 08多线程

    GCD 同步串行 死锁!,会导致队列引起循环等待 没有问题 同步并发 答案:12345 产生死锁 异步串行 异步并...

网友评论

      本文标题:GCD主队列同步任务死锁的理解

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