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了.
网友评论