GCD同步串行main_queue

时间:2016-03-13 13:34:40

标签: ios objective-c grand-central-dispatch

-(void)test1{
    dispatch_queue_t queue = dispatch_get_main_queue();
    NSLog(@"start");
    dispatch_sync(queue, ^{
        NSLog(@"%@",[NSThread currentThread]);
    });
}

-(void)test2{
    dispatch_queue_t queue = dispatch_queue_create("com.yaoye.serial", DISPATCH_QUEUE_SERIAL);
    NSLog(@"start");
    dispatch_sync(queue, ^{
        NSLog(@"%@",[NSThread currentThread]);
    });
}

Test1和test2在主线程

中执行

Test1示例:

主线程被阻塞等待同步功能,阻塞进入runloop的主线程无法执行,导致死锁。

Test2示例:

等待同步功能的主线程被阻塞,阻塞进入runloop的主线程,但没有死锁。&lt; 2016-03-14 13:55:06.730 GCD[54320:12111593] <NSThread: 0x7fef4ac08810>{number = 1, name = main}&gt;

queation:

为什么不是test2死锁?

1 个答案:

答案 0 :(得分:0)

因为test1使用相同的主队列,而test2使用不同的队列