将来跳槽用

主队列 同步执行崩溃原因

2018-06-19  本文已影响0人  foolish_hungry
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了.

上一篇下一篇

猜你喜欢

热点阅读