美文网首页
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 主线程中调用同步函数造成死锁

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