我们分析一下:
主队列main_queue是一个串行队列,串行队列的特点就是队列中所有任务必须顺序执行。也就是说必须按照添加到队列中的先后顺序执行。
我们再看一张图:
我们在代码中使用dispatch_sync()函数给主队列添加了一个同步任务:
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"线程死锁");
});
}
也就是说后添加的同步任务5是在viewDidLoad任务2之后,只有等待任务2执行完之后才能执行任务5,这就是串行队列的特点。但是任务5是一个同步任务,必须等任务5执行完才能执行其它任务,因此造成互相等待的死锁。
再看一个例子












