美文网首页将来跳槽用
主队列 同步执行崩溃原因

主队列 同步执行崩溃原因

作者: foolish_hungry | 来源:发表于2018-06-19 22:07 被阅读0次
dispatch_queue_t queue = dispatch_get_main_queue();

dispatch_sync(queue, ^{
        NSLog(@"task1---------%@", [NSThread currentThread]);
    });

 NSLog(@"end");

为啥走不到 end呢?
原因解释

主队列对应的主线程, 首先按顺序执行dispatch_sync, 走到 dispatch_sync的时
候, 这一步又添加了一个 task1 的输出任务到主队列中, 这时的task1 要想执行,
必须等待 dispatch_sync 执行完成 (因为主队列是串行队列, 任务必须按顺序执行) ,

但是问题又来了, 按照程序的执行方式, dispatch_sync要想执行完成, 必须先要执行 task1, 才能回调出去, 完成dispatch_sync任务.

所以, 相互等待造成死锁, 不能到达end了.

相关文章

  • iOS 解决同步任务提交当前队列死锁问题

    场景 同步提交到主队列 死锁,崩溃。 原因: 主队列在执行viewDidLoad任务,又同步执行block任务;v...

  • 主队列 同步执行崩溃原因

    为啥走不到 end呢?原因解释 主队列对应的主线程, 首先按顺序执行dispatch_sync, 走到 disp...

  • iOS笔记-多线程

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

  • iOS GCD随记(一)任务/队列组合

    1.同步执行+串行队列2.同步执行+并行队列3.异步执行+串行队列4.异步执行+并行队列5.同步执行+主队列6.异...

  • iOS GCD笔记

    串行队列 并发队列 主队列 全局并发队列 同步执行 异步执行 同步+并发队列 = 没有开启新线程,串行执行任务 s...

  • GCD小总结

    单例模式 串行队列同步/异步执行任务 并发队列同步/异步执行任务 队列组 延时执行 barrier

  • iOS - 多线程(二) GCD讲解

    目录: 1.GCD简介2.串行队列 + 同步执行3.串行队列 + 异步执行4.并发队列 + 同步执行5.并发队列 ...

  • iOS 多线程之GCD

    GCD核心概念 任务 :执行的操作 队列 :执行任务的等待队列 任务 同步执行 :同步添加任务到指定的队列中,如果...

  • iOSIN-GCD

    队列和同步异步 区别并行队列串行队列主队列同步(sync)没有开启新线程,串行执行任务没有开启新线程,串行执行任务...

  • GCD的学习笔记(One)

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

网友评论

    本文标题:主队列 同步执行崩溃原因

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