dispatch_sync 死锁该怎么理解?

dispatch_sync(dispatch_get_main_queue(), ^{NSLog(@"Hello?");});

如果dispatch_sync()的目标queue为当前queue,会发生死锁(并行queue并不会).

我们知道dispatch_sync会阻塞上下文任务,当前上下文为主队列,而主队列是串行队列,加入的任务要按顺序执行,所以新加入的任务要排在上下文任务之后执行,即排在dispatch_sync执行完成之后,新任务(block任务)等待dispatch_sync执行完成后执行,而dispatch_sync需要等待block中的代码执行完毕后继续向下执行,因此造成相互等待的情况,死锁形成。

参考这张图片来理解一下这个问题

dispatch_sync 死锁该怎么理解?_第1张图片
20180919153734638295780.png

你可能感兴趣的:(dispatch_sync 死锁该怎么理解?)