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

GCD多线程-dispatch_async与dispatch_sync的区别

时间:2015-12-22 21:16:10      阅读:412      评论:0      收藏:0      [点我收藏+]

标签:

从async和sync的字面上区分,async是异步的简称,sync是同步的简称。

1、dispatch_async意味着异步处理,主程序不会等待block块执行结果。

int main(int argc, const char * argv[]) {
    dispatch_queue_t queueMain = dispatch_get_main_queue();
    dispatch_async(queueMain, ^{
        NSLog(@"+++++++");});
    NSLog(@"hahahaha");
    return 0;
}

输出结果:hahahaha

结果中未输出+++++++

结果分析:异步执行并不影响main线程的执行,block会添加到main队列最后。但是由于直接运行到return行,所以main线程被杀死,并未执行添加到main线程的block块。如果在app工程中,会先输出hahahaha,再输出+++++++。

2、dispatch_sync意味着同步处理,主程序必须等block块执行完毕后,才能继续往下执行。

    dispatch_queue_t queueMain = dispatch_get_main_queue();
    dispatch_sync(queueMain, ^{
        NSLog(@"+++++++");});
    NSLog(@"hahahaha");

程序停在dispatch_sync()行。

结果分析:由于main线程执行到dispatch_sync()处,就处于等待状态。将block块添加到main队列,等待当前mian线程中的任务执行完毕后,执行block块。导致两边都在等待,所以出现死锁,程序卡住。

GCD多线程-dispatch_async与dispatch_sync的区别

标签:

原文地址:http://www.cnblogs.com/zhouyi-ios/p/5066654.html

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