dispatch_sync 死锁该怎么理解?
2018-09-19 本文已影响11人
行走的风车
dispatch_sync(dispatch_get_main_queue(), ^{NSLog(@"Hello?");});
如果dispatch_sync()
的目标queue
为当前queue
,会发生死锁(并行queue
并不会).
我们知道dispatch_sync
会阻塞上下文任务,当前上下文为主队列,而主队列是串行队列,加入的任务要按顺序执行,所以新加入的任务要排在上下文任务之后执行,即排在dispatch_sync
执行完成之后,新任务(block
任务)等待dispatch_sync
执行完成后执行,而dispatch_sync
需要等待block
中的代码执行完毕后继续向下执行,因此造成相互等待的情况,死锁形成。
参考这张图片来理解一下这个问题
20180919153734638295780.png