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

主队列 同步执行崩溃原因

作者: 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了.

    相关文章

      网友评论

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

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