主队列中添加同步任务为什么会死锁?

82 阅读1分钟
/** 主队列同步 */- (void)syncMain {

    NSLog(@"\n\n**************主队列同步,放到主线程会死锁***************\n\n");

    // 主队列
    dispatch_queue_t queue = dispatch_get_main_queue();

    dispatch_sync(queue, ^{
        for (int i = 0; i < 3; i++) {
            NSLog(@"主队列同步任务1   %@",[NSThread currentThread]);
        }
    });
}

主队列在主线程中,syncMain就是主队列中的任务。

1、主线程执行主队列中的任务syncMain.

2、执行到任务1添加到主队列的时候,需要执行任务1。

3、但此时主线程在执行syncMain任务,需要等待syncMain任务执行完毕之后在执行任务1.

4、但是执行syncMain的时候要执行任务1.

5、所以syncMain和任务1互相等待,造成死锁。