码迷,mamicode.com
首页 > 编程语言 > 详细

线程死锁问题

时间:2015-12-16 15:25:43      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"1");
    dispatch_sync(dispatch_get_main_queue(), ^{
        NSLog(@"2");
    });
    NSLog(@"3");
}
会输出什么,为什么
 
答: 输出1, 在iOS中使用 dispatch_sync(dispatch_get_main_queue()^(){block体});

dispath向主队列加一个同步的block;

此时主队列在等待    dispatch_sync(dispatch_get_main_queue(),^(){block体}); 而执行

dispatch_sync在等待主队列执行完毕。

从而造成死锁。

 

所以在ios使用主队列 dispatch_get_main_queue() 时 应该使用异步执行

dispatch_async(dispatch_get_main_queue(), ^(){

        NSLog(@"2");

 

    });

   

 结论:dispatch_sync 

会调用    dispatch_sync的线程    会等 dispatch_sync的里面的内容执行完再继续执行。

       dispatch_async

调用dispatch_async的线程   不会的等dispatch_async的内容,自己继续执行。

 

 

dispatch_sync/async(dispatch_get_main_queue(),^(){block体})

只是将block加入到队列。执行顺序按照队列顺序

而sync/async的区别在于 调用diapatch的线程是否等待dispatch执行完。

 

线程死锁问题

标签:

原文地址:http://www.cnblogs.com/dong-chen/p/5051210.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!