主队列-同步执行死锁问题,分享
//主队列-异步执行
//分析:在主线程,任务有序执行,当执行demo,就相当与在主队列添加一个任务A,这个任务执行完NSLog的时候,又往对列中添加一个任务B;由于是
异步执行,所以任务A执行完之后,才去执行任务B(block里面的代码); 可以通过NSLog验证.
-(void)demo{
NSLog(@"1235");
//1.主队列,不是自己创建的,是从系统获得,是一个特殊的串行队列,一定对应主线程
dispatch_queue_t mainQueue = dispatch_get_main_queue();
for (int i = 0; i<20; i++) {
dispatch_async(mainQueue, ^{
NSLog(@"%d->%@",i,[NSThread currentThread]);
});
}
NSLog(@"呵呵");
}
---------------------------------------------------------------------------//主队列-同步执行-->导致死锁
//当前线程是主线程,不执行
//分析:在主线程,任务有序执行,当执行demo2,就相当与在主队列添加一个任务A,这个任务执行完NSLog的时候,又往对列中添加一个任务B;由于是
同步执行,所以任务B会等着任务A执行完之后,在去执行由于又是在主线程中,任务A(整个demo2)等着任务B执行完之后在去执行之后的程序,这样两
个任务相互等待,导致死锁,->只打印i;
-(void)demo2{
NSLog(@"i");
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_sync(mainQueue, ^{
NSLog(@"%@",[NSThread currentThread]);
});
NSLog(@"呵呵");
}
-------------------------------------------------------------------------以上为个人理解,哪位大牛有更高深的见解请联系我(工作中互相学习)