面试题3
- (void)interview3{
NSLog(@"执行任务1--%@",[NSThread currentThread]);
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue, ^{
NSLog(@"执行任务2--%@",[NSThread currentThread]);
});
NSLog(@"执行任务3--%@",[NSThread currentThread]);
}
运行结果:
执行完任务1后就被卡死了。
解释:
interview3方法是在主线程中执行,执行完任务1后,通过同步函数向主队列(串行队列)添加任务2,由于同步添加的任务必须马上执行,而串行队列中当前任务(interview3)还没执行完,就没法安排任务2执行,所以要等当前正在执行的任务(interview3)执行完了后才能执行任务2,而interview3又要等任务2执行完了才会继续往下执行,这样就造成了相互等待而死锁。