美文网首页
OC 主线程中调用同步函数造成死锁

OC 主线程中调用同步函数造成死锁

作者: 十月末的故事 | 来源:发表于2018-03-08 23:55 被阅读34次
  NSLog(@"111");
  dispatch_sync(dispatch_get_main_queue(), ^{
      NSLog(@"sync");
  });
  NSLog(@"222");

后台输出 111 后,执行到 dispatch_sync 这句代码时会报错 EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0)

执行报错

这是因为

  1. 主线程是一个串行队列
  2. 执行 dispatch_sync 同步操作时,将 block 中的任务 NSLog(@"sync"); 添加到主线程队列末尾。
  3. NSLog(@"sync"); 要执行,需要它前面的任务执行完成,而它前面的任务是 dispatch_syncdispatch_sync要执行完成又需要 block 中的任务执行完成。
  4. 由此造成了互相等待,block 中的任务永远不会执行。

相关文章

  • OC 主线程中调用同步函数造成死锁

    后台输出 111 后,执行到 dispatch_sync 这句代码时会报错 EXC_BAD_INSTRUCTION...

  • GCD分析(中)

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

  • 关于主线程执行同步任务造成死锁的思考

    经典问题重现 bug 粘贴主线程+同步造成死锁 要想明白,为什么造成死锁,首先要搞懂主线程是干嘛的 主线程程序运行...

  • GCD死锁情况

    造成死锁的情况分析 第一种是:主队列同步任务很容易造成死锁,因为主队列是在主线程空闲时才会调度队列中的任务在主线程...

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

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

  • Synchronized关键字详解2(对非object持锁)

    4.死锁:同步方法容易造成死锁。Java线程死锁是一个经典的多线程问题,因为不同的线程都在等待根本不可能被释放的锁...

  • iOS笔记-多线程

    同步函数&串行队列 不会开启线程,在当前线程执行任务 任务串行执行,任务一个接着一个 会产生堵塞(死锁,崩溃) 主...

  • GCD相关题目

    1、以下代码结果会如何? 结果如下: 会造成死锁,主线程中【同步执行+主队列】,造成的互相等待。 2、写一个线程安...

  • GCD 死锁

    死锁 什么是死锁?在当前队列中, 追加一个任务; 如果使用同步函数, 则在当前线程中执行源代码, 与等待执行追加的...

  • 两个线程池死锁

    以上代码会造成“死锁” 条件1 createRequestExecutor 中只有一个线程,并且使用了同步队列Sy...

网友评论

      本文标题:OC 主线程中调用同步函数造成死锁

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