GCD 同步序列 main_queue
GCD sync serial main_queue
-(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在主线程中执行
测试 1 示例:
主线程阻塞等待同步函数,阻塞进入runloop主线程无法执行,导致死锁。
测试 2 示例:
等待同步函数的主线程阻塞,阻塞进入runloop的主线程,但没有死锁。<2016-03-14 13:55:06.730 GCD[54320:12111593] <NSThread: 0x7fef4ac08810>{number = 1, name = main}
>
问题:
为什么不是test2死锁?
因为test1
使用相同的主队列,而test2
使用不同的队列
-(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在主线程中执行
测试 1 示例:
主线程阻塞等待同步函数,阻塞进入runloop主线程无法执行,导致死锁。
测试 2 示例:
等待同步函数的主线程阻塞,阻塞进入runloop的主线程,但没有死锁。<2016-03-14 13:55:06.730 GCD[54320:12111593] <NSThread: 0x7fef4ac08810>{number = 1, name = main}
>
问题:
为什么不是test2死锁?
因为test1
使用相同的主队列,而test2
使用不同的队列